commit 043cdcaffd7b77e6a97c9ed61f085c4071d8b767
parent 368075314cff0fcf6c9b0f1f342b6689e08cb264
Author: lash <dev@holbrook.no>
Date: Sat, 25 Feb 2023 19:20:27 +0000
Hide setup in runtime, enable manual address for mint
Diffstat:
7 files changed, 156 insertions(+), 80 deletions(-)
diff --git a/js/contract/CraftNFT.bin b/js/contract/CraftNFT.bin
@@ -1 +1 @@
-60806040523480156200001157600080fd5b506040516200489938038062004899833981810160405281019062000037919062000279565b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600b8190555082600890816200008f919062000564565b508160099081620000a1919062000564565b505050506200064b565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200011482620000c9565b810181811067ffffffffffffffff82111715620001365762000135620000da565b5b80604052505050565b60006200014b620000ab565b905062000159828262000109565b919050565b600067ffffffffffffffff8211156200017c576200017b620000da565b5b6200018782620000c9565b9050602081019050919050565b60005b83811015620001b457808201518184015260208101905062000197565b60008484015250505050565b6000620001d7620001d1846200015e565b6200013f565b905082815260208101848484011115620001f657620001f5620000c4565b5b6200020384828562000194565b509392505050565b600082601f830112620002235762000222620000bf565b5b815162000235848260208601620001c0565b91505092915050565b6000819050919050565b62000253816200023e565b81146200025f57600080fd5b50565b600081519050620002738162000248565b92915050565b600080600060608486031215620002955762000294620000b5565b5b600084015167ffffffffffffffff811115620002b657620002b5620000ba565b5b620002c4868287016200020b565b935050602084015167ffffffffffffffff811115620002e857620002e7620000ba565b5b620002f6868287016200020b565b9250506040620003098682870162000262565b9150509250925092565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200036657607f821691505b6020821081036200037c576200037b6200031e565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b60008160020a8302905092915050565b600060088302620003e97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620003a7565b620003f58683620003a7565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620004426200043c62000436846200040d565b62000417565b6200040d565b9050919050565b6000819050919050565b6200045e8362000421565b620004766200046d8262000449565b848454620003b7565b825550505050565b600090565b6200048d6200047e565b6200049a81848462000453565b505050565b5b81811015620004c257620004b660008262000483565b600181019050620004a0565b5050565b601f8211156200051157620004db8162000382565b620004e68462000397565b81016020851015620004f6578190505b6200050e620005058562000397565b8301826200049f565b50505b505050565b60008160020a8304905092915050565b6000620005396000198460080262000516565b1980831691505092915050565b600062000554838362000526565b9150826002028217905092915050565b6200056f8262000313565b67ffffffffffffffff8111156200058b576200058a620000da565b5b6200059782546200034d565b620005a4828285620004c6565b600060209050601f831160018114620005dc5760008415620005c7578287015190505b620005d3858262000546565b86555062000643565b601f198416620005ec8662000382565b60005b828110156200061657848901518255600182019150602085019450602081019050620005ef565b8683101562000636578489015162000632601f89168262000526565b8355505b6001600288020188555050505b505050505050565b61423e806200065b6000396000f3fe608060405260043610610200576000357c01000000000000000000000000000000000000000000000000000000009004806369e85c711161011f578063b88d4fde116100b2578063da2824a811610081578063da2824a8146107a8578063e985e9c5146107d1578063f117e1731461080e578063f9613ab21461084b57610200565b8063b88d4fde146106d5578063c87b56dd146106f1578063c9796c391461072e578063d824ee4f1461076b57610200565b8063a22cb465116100ee578063a22cb46514610607578063adf288df14610630578063b1a6afd31461066d578063b242e5341461069857610200565b806369e85c711461053757806370a08231146105745780638da5cb5b146105b157806395d89b41146105dc57610200565b806340c84b0e116101975780634f64b2be116101665780634f64b2be14610455578063559f5dc9146104925780635ae06f7e146104d15780636352211e146104fa57610200565b806340c84b0e146103a857806342842e0e146103d357806349f2553a146103ef5780634d03546a1461041857610200565b806323b872dd116101d357806323b872dd146102d557806324e0febc146102f15780632b29ba231461032e5780633fd2f5931461036b57610200565b806301ffc9a71461020557806306fdde0314610242578063081812fc1461026d57806318160ddd146102aa575b600080fd5b34801561021157600080fd5b5061022c6004803603810190610227919061332c565b610888565b6040516102399190613374565b60405180910390f35b34801561024e57600080fd5b506102576109dc565b604051610264919061341f565b60405180910390f35b34801561027957600080fd5b50610294600480360381019061028f9190613477565b610a6a565b6040516102a191906134e5565b60405180910390f35b3480156102b657600080fd5b506102bf610aa7565b6040516102cc919061350f565b60405180910390f35b6102ef60048036038101906102ea9190613556565b610ab1565b005b3480156102fd57600080fd5b50610318600480360381019061031391906135df565b610b1c565b604051610325919061361b565b60405180910390f35b34801561033a57600080fd5b5061035560048036038101906103509190613636565b610b34565b6040516103629190613374565b60405180910390f35b34801561037757600080fd5b50610392600480360381019061038d91906135df565b610be0565b60405161039f91906136b8565b60405180910390f35b3480156103b457600080fd5b506103bd610f3f565b6040516103ca91906136b8565b60405180910390f35b6103ed60048036038101906103e89190613556565b610fcd565b005b3480156103fb57600080fd5b506104166004803603810190610411919061380f565b611038565b005b34801561042457600080fd5b5061043f600480360381019061043a9190613896565b611350565b60405161044c9190613374565b60405180910390f35b34801561046157600080fd5b5061047c60048036038101906104779190613477565b61162e565b604051610489919061361b565b60405180910390f35b34801561049e57600080fd5b506104b960048036038101906104b491906138d6565b611652565b6040516104c893929190613925565b60405180910390f35b3480156104dd57600080fd5b506104f860048036038101906104f39190613636565b6116c6565b005b34801561050657600080fd5b50610521600480360381019061051c9190613477565b6117e5565b60405161052e91906134e5565b60405180910390f35b34801561054357600080fd5b5061055e600480360381019061055991906135df565b611821565b60405161056b919061341f565b60405180910390f35b34801561058057600080fd5b5061059b60048036038101906105969190613636565b611a3a565b6040516105a8919061350f565b60405180910390f35b3480156105bd57600080fd5b506105c6611a83565b6040516105d391906134e5565b60405180910390f35b3480156105e857600080fd5b506105f1611aa7565b6040516105fe919061341f565b60405180910390f35b34801561061357600080fd5b5061062e60048036038101906106299190613988565b611b35565b005b34801561063c57600080fd5b50610657600480360381019061065291906139c8565b611dd7565b604051610664919061361b565b60405180910390f35b34801561067957600080fd5b50610682612049565b60405161068f919061361b565b60405180910390f35b3480156106a457600080fd5b506106bf60048036038101906106ba9190613988565b61204f565b6040516106cc9190613374565b60405180910390f35b6106ef60048036038101906106ea9190613aa9565b612130565b005b3480156106fd57600080fd5b5061071860048036038101906107139190613477565b61220b565b604051610725919061341f565b60405180910390f35b34801561073a57600080fd5b50610755600480360381019061075091906135df565b61227d565b604051610762919061341f565b60405180910390f35b34801561077757600080fd5b50610792600480360381019061078d9190613b66565b612677565b60405161079f919061361b565b60405180910390f35b3480156107b457600080fd5b506107cf60048036038101906107ca9190613636565b61287e565b005b3480156107dd57600080fd5b506107f860048036038101906107f39190613bb9565b612966565b6040516108059190613374565b60405180910390f35b34801561081a57600080fd5b5061083560048036038101906108309190613bf9565b6129fe565b604051610842919061361b565b60405180910390f35b34801561085757600080fd5b50610872600480360381019061086d91906135df565b612b57565b60405161087f919061361b565b60405180910390f35b60006380ac58cd7c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036108dc57600190506109d7565b635b5e139f7c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19160361092e57600190506109d7565b63449a52f87c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19160361098057600190506109d7565b6301ffc9a77c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036109d257600190506109d7565b600090505b919050565b600880546109e990613c8f565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1590613c8f565b8015610a625780601f10610a3757610100808354040283529160200191610a62565b820191906000526020600020905b815481529060010190602001808311610a4557829003601f168201915b505050505081565b60006006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600a54905090565b610abc838383612c03565b808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60056020528060005260406000206000915090505481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680610bd9575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b9050919050565b606080600080604067ffffffffffffffff811115610c0157610c006136e4565b5b6040519080825280601f01601f191660200182016040528015610c335781602001600182028036833780820191505090505b5092506000905060005b6020811015610f3357600460f0878360208110610c5d57610c5c613cc0565b5b1a7f0100000000000000000000000000000000000000000000000000000000000000027f010000000000000000000000000000000000000000000000000000000000000090041660ff16908060020a82049150509250600a8360ff161015610d3557603083610ccc9190613d2b565b7f010000000000000000000000000000000000000000000000000000000000000002848381518110610d0157610d00613cc0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350610da7565b605783610d429190613d2b565b7f010000000000000000000000000000000000000000000000000000000000000002848381518110610d7757610d76613cc0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b600f868260208110610dbc57610dbb613cc0565b5b1a7f0100000000000000000000000000000000000000000000000000000000000000027f01000000000000000000000000000000000000000000000000000000000000009004169250600a8360ff161015610e9357603083610e1e9190613d2b565b7f01000000000000000000000000000000000000000000000000000000000000000284600184610e4e9190613d60565b81518110610e5f57610e5e613cc0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350610f11565b605783610ea09190613d2b565b7f01000000000000000000000000000000000000000000000000000000000000000284600184610ed09190613d60565b81518110610ee157610ee0613cc0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b600282610f1e9190613d60565b91508080610f2b90613d94565b915050610c3d565b50829350505050919050565b600c8054610f4c90613c8f565b80601f0160208091040260200160405190810160405280929190818152602001828054610f7890613c8f565b8015610fc55780601f10610f9a57610100808354040283529160200191610fc5565b820191906000526020600020905b815481529060010190602001808311610fa857829003601f168201915b505050505081565b610fd8838383612c03565b808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b606060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461109557600080fd5b82915081519050602f7f010000000000000000000000000000000000000000000000000000000000000002826001836110ce9190613ddc565b815181106110df576110de613cc0565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461115f57808061115b90613d94565b9150505b8067ffffffffffffffff811115611179576111786136e4565b5b6040519080825280601f01601f1916602001820160405280156111ab5781602001600182028036833780820191505090505b50600c90816111ba9190613fc2565b5060005b82518110156112ab578281815181106111da576111d9613cc0565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002600c82815461123290613c8f565b811061124157611240613cc0565b5b8154600116156112605790600052602060002090602091828204019190065b601f036101000a81548160ff021916907f01000000000000000000000000000000000000000000000000000000000000008404021790555080806112a390613d94565b9150506111be565b508151811461134b577f2f00000000000000000000000000000000000000000000000000000000000000600c835181546112e490613c8f565b81106112f3576112f2613cc0565b5b8154600116156113125790600052602060002090602091828204019190065b601f036101000a81548160ff021916907f0100000000000000000000000000000000000000000000000000000000000000840402179055505b505050565b60008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806113f65750600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6113ff57600080fd5b61140761328d565b6004600086815260200190815260200160002080549050915060008211156114845760006004600087815260200190815260200160002060008154811061145157611450613cc0565b5b9060005260206000200160000160009054906101000a900465ffffffffffff1665ffffffffffff161161148357600080fd5b5b83816000019065ffffffffffff16908165ffffffffffff168152505060046000868152602001908152602001600020819080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548165ffffffffffff021916908365ffffffffffff16021790555060208201518160000160066101000a81548165ffffffffffff021916908365ffffffffffff160217905550604082015181600001600c6101000a81548160ff0219169083151502179055505050600385908060018154018082558091505060019003906000526020600020016000909190919091505560008465ffffffffffff16036115a9576001600a600082825461159d9190613d60565b925050819055506115cb565b8365ffffffffffff16600a60008282546115c39190613d60565b925050819055505b8365ffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fb85ba54b9f6f8241b7e1499e3cfc186ac0b1c8b7100f599bf6ca6844f896c3428760405161161a919061361b565b60405180910390a360019250505092915050565b6003818154811061163e57600080fd5b906000526020600020016000915090505481565b6004602052816000526040600020818154811061166e57600080fd5b90600052602060002001600091509150508060000160009054906101000a900465ffffffffffff16908060000160069054906101000a900465ffffffffffff169080600001600c9054906101000a900460ff16905083565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061174b575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61178a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611781906140e0565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600080600560008460010281526020019081526020016000205490506060819060020a026c010000000000000000000000009004915050919050565b6060806060600061183185610be0565b9150600c805461184090613c8f565b905090508082516118519190613d60565b67ffffffffffffffff81111561186a576118696136e4565b5b6040519080825280601f01601f19166020018201604052801561189c5781602001600182028036833780820191505090505b50925060005b8181101561196157600c8181546118b890613c8f565b81106118c7576118c6613cc0565b5b8154600116156118e65790600052602060002090602091828204019190065b9054901a7f01000000000000000000000000000000000000000000000000000000000000000284828151811061191f5761191e613cc0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808061195990613d94565b9150506118a2565b5060005b8251811015611a2e5782818151811061198157611980613cc0565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000028483815181106119de576119dd613cc0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508180611a1890613d94565b9250508080611a2690613d94565b915050611965565b50829350505050919050565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60098054611ab490613c8f565b80601f0160208091040260200160405190810160405280929190818152602001828054611ae090613c8f565b8015611b2d5780601f10611b0257610100808354040283529160200191611b2d565b820191906000526020600020905b815481529060010190602001808311611b1057829003601f168201915b505050505081565b8015611c5657600073ffffffffffffffffffffffffffffffffffffffff16600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bd357600080fd5b81600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611d6e565b600073ffffffffffffffffffffffffffffffffffffffff16600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611cee57600080fd5b6000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611dcb9190613374565b60405180910390a35050565b60008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611e7d5750600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611e8657600080fd5b6001600460008581526020019081526020016000208054905014611ea957600080fd5b600060046000858152602001908152602001600020600081548110611ed157611ed0613cc0565b5b9060005260206000200160000160009054906101000a900465ffffffffffff1665ffffffffffff1614611f0357600080fd5b6000600102600560008581526020019081526020016000205414611f2657600080fd5b8373ffffffffffffffffffffffffffffffffffffffff1690507fc000000000000000000000000000000000000000000000000000000000000000811790508060010260056000858152602001908152602001600020819055506001600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fcf9190613d60565b925050819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f88560019004604051612037919061350f565b60405180910390a38291505092915050565b600b5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146120aa57600080fd5b600260009054906101000a900460ff16156120c457600080fd5b81156120e6576001600260006101000a81548160ff0219169083151502179055505b826000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001905092915050565b61213b848484612c03565b818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f75c9e114f073c346aac7d1d7e9a3c3c14edabcdd27de07d1d9e425f45d318c5e846121f090614125565b6040516121fd919061361b565b60405180910390a450505050565b6060600082600102905060006004600083815260200190815260200160002080549050036122465761223c81612b57565b9050806001900492505b600060046000838152602001908152602001600020805490501161226957600080fd5b61227583600102611821565b915050919050565b6060806060600061228d85610be0565b9150604767ffffffffffffffff8111156122aa576122a96136e4565b5b6040519080825280601f01601f1916602001820160405280156122dc5781602001600182028036833780820191505090505b5092507f73000000000000000000000000000000000000000000000000000000000000008360008151811061231457612313613cc0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f68000000000000000000000000000000000000000000000000000000000000008360018151811061237857612377613cc0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f6100000000000000000000000000000000000000000000000000000000000000836002815181106123dc576123db613cc0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f3200000000000000000000000000000000000000000000000000000000000000836003815181106124405761243f613cc0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f3500000000000000000000000000000000000000000000000000000000000000836004815181106124a4576124a3613cc0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f36000000000000000000000000000000000000000000000000000000000000008360058151811061250857612507613cc0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f3a000000000000000000000000000000000000000000000000000000000000008360068151811061256c5761256b613cc0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506007905060005b604081101561266b578281815181106125be576125bd613cc0565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f01000000000000000000000000000000000000000000000000000000000000000284838151811061261b5761261a613cc0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350818061265590613d94565b925050808061266390613d94565b9150506125a2565b50829350505050919050565b600080600460008581526020019081526020016000208361ffff16815481106126a3576126a2613cc0565b5b90600052602060002001905080600001600c9054906101000a900460ff16156126cb57600080fd5b60008361ffff161480156126fd575060008160000160009054906101000a900465ffffffffffff1665ffffffffffff16145b1561275c5760018160000160068282829054906101000a900465ffffffffffff16612728919061418c565b92506101000a81548165ffffffffffff021916908365ffffffffffff1602179055506127548585611dd7565b915050612877565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806127ff5750600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61280857600080fd5b8060000160009054906101000a900465ffffffffffff1665ffffffffffff168160000160069054906101000a900465ffffffffffff1665ffffffffffff161061285057600080fd5b6128738585858460000160069054906101000a900465ffffffffffff1685612f1a565b9150505b9392505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461290c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612903906140e0565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60008173ffffffffffffffffffffffffffffffffffffffff16600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614905092915050565b600080600460008681526020019081526020016000208461ffff1681548110612a2a57612a29613cc0565b5b90600052602060002001905060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480612ad95750600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612ae257600080fd5b60008160000160009054906101000a900465ffffffffffff1665ffffffffffff1611612b0d57600080fd5b8060000160009054906101000a900465ffffffffffff1665ffffffffffff168365ffffffffffff1610612b3f57600080fd5b612b4c8686868685612f1a565b915050949350505050565b60008060056000848152602001908152602001600020549050612b7981613198565b612b8257600080fd5b612b8b816131ca565b15612b995782915050612bfe565b7effffffffffffffff00000000000000000000000000000000000000000000006001028116905060b881908060020a820491505090507fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000600102831681179050809150505b919050565b60003073ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401612c5a919061350f565b602060405180830381865afa158015612c77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c9b91906141db565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612cd557600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614612e09573373ffffffffffffffffffffffffffffffffffffffff166006600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480612dff57503373ffffffffffffffffffffffffffffffffffffffff16600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b612e0857600080fd5b5b60006006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612e6682846131fc565b6001600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612eb69190613ddc565b925050819055506001600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f0d9190613d60565b9250508190555050505050565b6000806000807fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008860019004169250603067ffffffffffffffff8861ffff161667ffffffffffffffff169060020a0267ffffffffffffffff16831792508565ffffffffffff16831792508260010290506000600102600560008381526020019081526020016000205414612fad57600080fd5b84600001600c9054906101000a900460ff1661300f578460000160069054906101000a900465ffffffffffff1665ffffffffffff168665ffffffffffff161461300e57600185600001600c6101000a81548160ff0219169083151502179055505b5b67ffffffffffffffff886001900416915060b8829060020a0291507f8000000000000000000000000000000000000000000000000000000000000000821791508873ffffffffffffffffffffffffffffffffffffffff168217915060018560000160068282829054906101000a900465ffffffffffff16613090919061418c565b92506101000a81548165ffffffffffff021916908365ffffffffffff1602179055508160010260056000838152602001908152602001600020819055506001600d60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461311d9190613d60565b925050819055508873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f885604051613181919061350f565b60405180910390a380935050505095945050505050565b6000807f8000000000000000000000000000000000000000000000000000000000000000836001900416119050919050565b6000807f4000000000000000000000000000000000000000000000000000000000000000836001900416119050919050565b60008083600102905060056000828152602001908152602001600020546001900491506000820361322c57600080fd5b7fffffffffffffffffffffffff0000000000000000000000000000000000000000821691508273ffffffffffffffffffffffffffffffffffffffff168217915081600102600560008381526020019081526020016000208190555050505050565b6040518060600160405280600065ffffffffffff168152602001600065ffffffffffff1681526020016000151581525090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613309816132d4565b811461331457600080fd5b50565b60008135905061332681613300565b92915050565b600060208284031215613342576133416132ca565b5b600061335084828501613317565b91505092915050565b60008115159050919050565b61336e81613359565b82525050565b60006020820190506133896000830184613365565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156133c95780820151818401526020810190506133ae565b60008484015250505050565b6000601f19601f8301169050919050565b60006133f18261338f565b6133fb818561339a565b935061340b8185602086016133ab565b613414816133d5565b840191505092915050565b6000602082019050818103600083015261343981846133e6565b905092915050565b6000819050919050565b61345481613441565b811461345f57600080fd5b50565b6000813590506134718161344b565b92915050565b60006020828403121561348d5761348c6132ca565b5b600061349b84828501613462565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006134cf826134a4565b9050919050565b6134df816134c4565b82525050565b60006020820190506134fa60008301846134d6565b92915050565b61350981613441565b82525050565b60006020820190506135246000830184613500565b92915050565b613533816134c4565b811461353e57600080fd5b50565b6000813590506135508161352a565b92915050565b60008060006060848603121561356f5761356e6132ca565b5b600061357d86828701613541565b935050602061358e86828701613541565b925050604061359f86828701613462565b9150509250925092565b6000819050919050565b6135bc816135a9565b81146135c757600080fd5b50565b6000813590506135d9816135b3565b92915050565b6000602082840312156135f5576135f46132ca565b5b6000613603848285016135ca565b91505092915050565b613615816135a9565b82525050565b6000602082019050613630600083018461360c565b92915050565b60006020828403121561364c5761364b6132ca565b5b600061365a84828501613541565b91505092915050565b600081519050919050565b600082825260208201905092915050565b600061368a82613663565b613694818561366e565b93506136a48185602086016133ab565b6136ad816133d5565b840191505092915050565b600060208201905081810360008301526136d2818461367f565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61371c826133d5565b810181811067ffffffffffffffff8211171561373b5761373a6136e4565b5b80604052505050565b600061374e6132c0565b905061375a8282613713565b919050565b600067ffffffffffffffff82111561377a576137796136e4565b5b613783826133d5565b9050602081019050919050565b82818337600083830152505050565b60006137b26137ad8461375f565b613744565b9050828152602081018484840111156137ce576137cd6136df565b5b6137d9848285613790565b509392505050565b600082601f8301126137f6576137f56136da565b5b813561380684826020860161379f565b91505092915050565b600060208284031215613825576138246132ca565b5b600082013567ffffffffffffffff811115613843576138426132cf565b5b61384f848285016137e1565b91505092915050565b600065ffffffffffff82169050919050565b61387381613858565b811461387e57600080fd5b50565b6000813590506138908161386a565b92915050565b600080604083850312156138ad576138ac6132ca565b5b60006138bb858286016135ca565b92505060206138cc85828601613881565b9150509250929050565b600080604083850312156138ed576138ec6132ca565b5b60006138fb858286016135ca565b925050602061390c85828601613462565b9150509250929050565b61391f81613858565b82525050565b600060608201905061393a6000830186613916565b6139476020830185613916565b6139546040830184613365565b949350505050565b61396581613359565b811461397057600080fd5b50565b6000813590506139828161395c565b92915050565b6000806040838503121561399f5761399e6132ca565b5b60006139ad85828601613541565b92505060206139be85828601613973565b9150509250929050565b600080604083850312156139df576139de6132ca565b5b60006139ed85828601613541565b92505060206139fe858286016135ca565b9150509250929050565b600067ffffffffffffffff821115613a2357613a226136e4565b5b613a2c826133d5565b9050602081019050919050565b6000613a4c613a4784613a08565b613744565b905082815260208101848484011115613a6857613a676136df565b5b613a73848285613790565b509392505050565b600082601f830112613a9057613a8f6136da565b5b8135613aa0848260208601613a39565b91505092915050565b60008060008060808587031215613ac357613ac26132ca565b5b6000613ad187828801613541565b9450506020613ae287828801613541565b9350506040613af387828801613462565b925050606085013567ffffffffffffffff811115613b1457613b136132cf565b5b613b2087828801613a7b565b91505092959194509250565b600061ffff82169050919050565b613b4381613b2c565b8114613b4e57600080fd5b50565b600081359050613b6081613b3a565b92915050565b600080600060608486031215613b7f57613b7e6132ca565b5b6000613b8d86828701613541565b9350506020613b9e868287016135ca565b9250506040613baf86828701613b51565b9150509250925092565b60008060408385031215613bd057613bcf6132ca565b5b6000613bde85828601613541565b9250506020613bef85828601613541565b9150509250929050565b60008060008060808587031215613c1357613c126132ca565b5b6000613c2187828801613541565b9450506020613c32878288016135ca565b9350506040613c4387828801613b51565b9250506060613c5487828801613881565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613ca757607f821691505b602082108103613cba57613cb9613c60565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff82169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613d3682613cef565b9150613d4183613cef565b9250828201905060ff811115613d5a57613d59613cfc565b5b92915050565b6000613d6b82613441565b9150613d7683613441565b9250828201905080821115613d8e57613d8d613cfc565b5b92915050565b6000613d9f82613441565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613dd157613dd0613cfc565b5b600182019050919050565b6000613de782613441565b9150613df283613441565b9250828203905081811115613e0a57613e09613cfc565b5b92915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b60008160020a8302905092915050565b600060088302613e757fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613e35565b613e7f8683613e35565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613ebc613eb7613eb284613441565b613e97565b613441565b9050919050565b6000819050919050565b613ed683613ea1565b613eea613ee282613ec3565b848454613e45565b825550505050565b600090565b613eff613ef2565b613f0a818484613ecd565b505050565b5b81811015613f2e57613f23600082613ef7565b600181019050613f10565b5050565b601f821115613f7357613f4481613e10565b613f4d84613e25565b81016020851015613f5c578190505b613f70613f6885613e25565b830182613f0f565b50505b505050565b60008160020a8304905092915050565b6000613f9960001984600802613f78565b1980831691505092915050565b6000613fb28383613f88565b9150826002028217905092915050565b613fcb82613663565b67ffffffffffffffff811115613fe457613fe36136e4565b5b613fee8254613c8f565b613ff9828285613f32565b600060209050601f83116001811461402c576000841561401a578287015190505b6140248582613fa6565b86555061408c565b601f19841661403a86613e10565b60005b828110156140625784890151825560018201915060208501945060208101905061403d565b8683101561407f578489015161407b601f891682613f88565b8355505b6001600288020188555050505b505050505050565b7f4552525f41434345535300000000000000000000000000000000000000000000600082015250565b60006140ca600a8361339a565b91506140d582614094565b602082019050919050565b600060208201905081810360008301526140f9816140bd565b9050919050565b6000819050602082019050919050565b600061411c82516135a9565b80915050919050565b600061413082613663565b8261413a84614100565b905061414581614110565b92506020821015614185576141807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83602003600802613e35565b831692505b5050919050565b600061419782613858565b91506141a283613858565b9250828201905065ffffffffffff8111156141c0576141bf613cfc565b5b92915050565b6000815190506141d58161352a565b92915050565b6000602082840312156141f1576141f06132ca565b5b60006141ff848285016141c6565b9150509291505056fea2646970667358221220a4af5fe38235e6966c14266548b35f81299d92794a1448e534de90d1ab82258264736f6c63430008120033
-\ No newline at end of file
+60806040523480156200001157600080fd5b50604051620049a7380380620049a7833981810160405281019062000037919062000279565b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600b8190555082600890816200008f919062000564565b508160099081620000a1919062000564565b505050506200064b565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200011482620000c9565b810181811067ffffffffffffffff82111715620001365762000135620000da565b5b80604052505050565b60006200014b620000ab565b905062000159828262000109565b919050565b600067ffffffffffffffff8211156200017c576200017b620000da565b5b6200018782620000c9565b9050602081019050919050565b60005b83811015620001b457808201518184015260208101905062000197565b60008484015250505050565b6000620001d7620001d1846200015e565b6200013f565b905082815260208101848484011115620001f657620001f5620000c4565b5b6200020384828562000194565b509392505050565b600082601f830112620002235762000222620000bf565b5b815162000235848260208601620001c0565b91505092915050565b6000819050919050565b62000253816200023e565b81146200025f57600080fd5b50565b600081519050620002738162000248565b92915050565b600080600060608486031215620002955762000294620000b5565b5b600084015167ffffffffffffffff811115620002b657620002b5620000ba565b5b620002c4868287016200020b565b935050602084015167ffffffffffffffff811115620002e857620002e7620000ba565b5b620002f6868287016200020b565b9250506040620003098682870162000262565b9150509250925092565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200036657607f821691505b6020821081036200037c576200037b6200031e565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b60008160020a8302905092915050565b600060088302620003e97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620003a7565b620003f58683620003a7565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620004426200043c62000436846200040d565b62000417565b6200040d565b9050919050565b6000819050919050565b6200045e8362000421565b620004766200046d8262000449565b848454620003b7565b825550505050565b600090565b6200048d6200047e565b6200049a81848462000453565b505050565b5b81811015620004c257620004b660008262000483565b600181019050620004a0565b5050565b601f8211156200051157620004db8162000382565b620004e68462000397565b81016020851015620004f6578190505b6200050e620005058562000397565b8301826200049f565b50505b505050565b60008160020a8304905092915050565b6000620005396000198460080262000516565b1980831691505092915050565b600062000554838362000526565b9150826002028217905092915050565b6200056f8262000313565b67ffffffffffffffff8111156200058b576200058a620000da565b5b6200059782546200034d565b620005a4828285620004c6565b600060209050601f831160018114620005dc5760008415620005c7578287015190505b620005d3858262000546565b86555062000643565b601f198416620005ec8662000382565b60005b828110156200061657848901518255600182019150602085019450602081019050620005ef565b8683101562000636578489015162000632601f89168262000526565b8355505b6001600288020188555050505b505050505050565b61434c806200065b6000396000f3fe608060405260043610610200576000357c01000000000000000000000000000000000000000000000000000000009004806369e85c711161011f578063b88d4fde116100b2578063da2824a811610081578063da2824a8146107a8578063e985e9c5146107d1578063f117e1731461080e578063f9613ab21461084b57610200565b8063b88d4fde146106d5578063c87b56dd146106f1578063c9796c391461072e578063d824ee4f1461076b57610200565b8063a22cb465116100ee578063a22cb46514610607578063adf288df14610630578063b1a6afd31461066d578063b242e5341461069857610200565b806369e85c711461053757806370a08231146105745780638da5cb5b146105b157806395d89b41146105dc57610200565b806340c84b0e116101975780634f64b2be116101665780634f64b2be14610455578063559f5dc9146104925780635ae06f7e146104d15780636352211e146104fa57610200565b806340c84b0e146103a857806342842e0e146103d357806349f2553a146103ef5780634d03546a1461041857610200565b806323b872dd116101d357806323b872dd146102d557806324e0febc146102f15780632b29ba231461032e5780633fd2f5931461036b57610200565b806301ffc9a71461020557806306fdde0314610242578063081812fc1461026d57806318160ddd146102aa575b600080fd5b34801561021157600080fd5b5061022c600480360381019061022791906133ce565b610888565b6040516102399190613416565b60405180910390f35b34801561024e57600080fd5b506102576109dc565b60405161026491906134c1565b60405180910390f35b34801561027957600080fd5b50610294600480360381019061028f9190613519565b610a6a565b6040516102a19190613587565b60405180910390f35b3480156102b657600080fd5b506102bf610aa7565b6040516102cc91906135b1565b60405180910390f35b6102ef60048036038101906102ea91906135f8565b610ab1565b005b3480156102fd57600080fd5b5061031860048036038101906103139190613681565b610b1c565b60405161032591906136bd565b60405180910390f35b34801561033a57600080fd5b50610355600480360381019061035091906136d8565b610b34565b6040516103629190613416565b60405180910390f35b34801561037757600080fd5b50610392600480360381019061038d9190613681565b610be0565b60405161039f919061375a565b60405180910390f35b3480156103b457600080fd5b506103bd610f3f565b6040516103ca919061375a565b60405180910390f35b6103ed60048036038101906103e891906135f8565b610fcd565b005b3480156103fb57600080fd5b50610416600480360381019061041191906138b1565b611038565b005b34801561042457600080fd5b5061043f600480360381019061043a9190613938565b611350565b60405161044c9190613416565b60405180910390f35b34801561046157600080fd5b5061047c60048036038101906104779190613519565b61162e565b60405161048991906136bd565b60405180910390f35b34801561049e57600080fd5b506104b960048036038101906104b49190613978565b611652565b6040516104c8939291906139c7565b60405180910390f35b3480156104dd57600080fd5b506104f860048036038101906104f391906136d8565b6116c6565b005b34801561050657600080fd5b50610521600480360381019061051c9190613519565b6117e5565b60405161052e9190613587565b60405180910390f35b34801561054357600080fd5b5061055e60048036038101906105599190613681565b611821565b60405161056b91906134c1565b60405180910390f35b34801561058057600080fd5b5061059b600480360381019061059691906136d8565b611a3a565b6040516105a891906135b1565b60405180910390f35b3480156105bd57600080fd5b506105c6611a83565b6040516105d39190613587565b60405180910390f35b3480156105e857600080fd5b506105f1611aa7565b6040516105fe91906134c1565b60405180910390f35b34801561061357600080fd5b5061062e60048036038101906106299190613a2a565b611b35565b005b34801561063c57600080fd5b5061065760048036038101906106529190613a6a565b611dd7565b60405161066491906136bd565b60405180910390f35b34801561067957600080fd5b50610682612049565b60405161068f91906136bd565b60405180910390f35b3480156106a457600080fd5b506106bf60048036038101906106ba9190613a2a565b61204f565b6040516106cc9190613416565b60405180910390f35b6106ef60048036038101906106ea9190613b4b565b612130565b005b3480156106fd57600080fd5b5061071860048036038101906107139190613519565b61220b565b60405161072591906134c1565b60405180910390f35b34801561073a57600080fd5b5061075560048036038101906107509190613681565b61227d565b60405161076291906134c1565b60405180910390f35b34801561077757600080fd5b50610792600480360381019061078d9190613c08565b612677565b60405161079f91906136bd565b60405180910390f35b3480156107b457600080fd5b506107cf60048036038101906107ca91906136d8565b6128ea565b005b3480156107dd57600080fd5b506107f860048036038101906107f39190613c5b565b6129d2565b6040516108059190613416565b60405180910390f35b34801561081a57600080fd5b5061083560048036038101906108309190613c9b565b612a6a565b60405161084291906136bd565b60405180910390f35b34801561085757600080fd5b50610872600480360381019061086d9190613681565b612bf9565b60405161087f91906136bd565b60405180910390f35b60006380ac58cd7c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036108dc57600190506109d7565b635b5e139f7c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19160361092e57600190506109d7565b63449a52f87c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19160361098057600190506109d7565b6301ffc9a77c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036109d257600190506109d7565b600090505b919050565b600880546109e990613d31565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1590613d31565b8015610a625780601f10610a3757610100808354040283529160200191610a62565b820191906000526020600020905b815481529060010190602001808311610a4557829003601f168201915b505050505081565b60006006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600a54905090565b610abc838383612ca5565b808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60056020528060005260406000206000915090505481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680610bd9575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b9050919050565b606080600080604067ffffffffffffffff811115610c0157610c00613786565b5b6040519080825280601f01601f191660200182016040528015610c335781602001600182028036833780820191505090505b5092506000905060005b6020811015610f3357600460f0878360208110610c5d57610c5c613d62565b5b1a7f0100000000000000000000000000000000000000000000000000000000000000027f010000000000000000000000000000000000000000000000000000000000000090041660ff16908060020a82049150509250600a8360ff161015610d3557603083610ccc9190613dcd565b7f010000000000000000000000000000000000000000000000000000000000000002848381518110610d0157610d00613d62565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350610da7565b605783610d429190613dcd565b7f010000000000000000000000000000000000000000000000000000000000000002848381518110610d7757610d76613d62565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b600f868260208110610dbc57610dbb613d62565b5b1a7f0100000000000000000000000000000000000000000000000000000000000000027f01000000000000000000000000000000000000000000000000000000000000009004169250600a8360ff161015610e9357603083610e1e9190613dcd565b7f01000000000000000000000000000000000000000000000000000000000000000284600184610e4e9190613e02565b81518110610e5f57610e5e613d62565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350610f11565b605783610ea09190613dcd565b7f01000000000000000000000000000000000000000000000000000000000000000284600184610ed09190613e02565b81518110610ee157610ee0613d62565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b600282610f1e9190613e02565b91508080610f2b90613e36565b915050610c3d565b50829350505050919050565b600c8054610f4c90613d31565b80601f0160208091040260200160405190810160405280929190818152602001828054610f7890613d31565b8015610fc55780601f10610f9a57610100808354040283529160200191610fc5565b820191906000526020600020905b815481529060010190602001808311610fa857829003601f168201915b505050505081565b610fd8838383612ca5565b808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b606060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461109557600080fd5b82915081519050602f7f010000000000000000000000000000000000000000000000000000000000000002826001836110ce9190613e7e565b815181106110df576110de613d62565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461115f57808061115b90613e36565b9150505b8067ffffffffffffffff81111561117957611178613786565b5b6040519080825280601f01601f1916602001820160405280156111ab5781602001600182028036833780820191505090505b50600c90816111ba9190614064565b5060005b82518110156112ab578281815181106111da576111d9613d62565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002600c82815461123290613d31565b811061124157611240613d62565b5b8154600116156112605790600052602060002090602091828204019190065b601f036101000a81548160ff021916907f01000000000000000000000000000000000000000000000000000000000000008404021790555080806112a390613e36565b9150506111be565b508151811461134b577f2f00000000000000000000000000000000000000000000000000000000000000600c835181546112e490613d31565b81106112f3576112f2613d62565b5b8154600116156113125790600052602060002090602091828204019190065b601f036101000a81548160ff021916907f0100000000000000000000000000000000000000000000000000000000000000840402179055505b505050565b60008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806113f65750600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6113ff57600080fd5b61140761332f565b6004600086815260200190815260200160002080549050915060008211156114845760006004600087815260200190815260200160002060008154811061145157611450613d62565b5b9060005260206000200160000160009054906101000a900465ffffffffffff1665ffffffffffff161161148357600080fd5b5b83816000019065ffffffffffff16908165ffffffffffff168152505060046000868152602001908152602001600020819080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548165ffffffffffff021916908365ffffffffffff16021790555060208201518160000160066101000a81548165ffffffffffff021916908365ffffffffffff160217905550604082015181600001600c6101000a81548160ff0219169083151502179055505050600385908060018154018082558091505060019003906000526020600020016000909190919091505560008465ffffffffffff16036115a9576001600a600082825461159d9190613e02565b925050819055506115cb565b8365ffffffffffff16600a60008282546115c39190613e02565b925050819055505b8365ffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fb85ba54b9f6f8241b7e1499e3cfc186ac0b1c8b7100f599bf6ca6844f896c3428760405161161a91906136bd565b60405180910390a360019250505092915050565b6003818154811061163e57600080fd5b906000526020600020016000915090505481565b6004602052816000526040600020818154811061166e57600080fd5b90600052602060002001600091509150508060000160009054906101000a900465ffffffffffff16908060000160069054906101000a900465ffffffffffff169080600001600c9054906101000a900460ff16905083565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061174b575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61178a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178190614182565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600080600560008460010281526020019081526020016000205490506060819060020a026c010000000000000000000000009004915050919050565b6060806060600061183185610be0565b9150600c805461184090613d31565b905090508082516118519190613e02565b67ffffffffffffffff81111561186a57611869613786565b5b6040519080825280601f01601f19166020018201604052801561189c5781602001600182028036833780820191505090505b50925060005b8181101561196157600c8181546118b890613d31565b81106118c7576118c6613d62565b5b8154600116156118e65790600052602060002090602091828204019190065b9054901a7f01000000000000000000000000000000000000000000000000000000000000000284828151811061191f5761191e613d62565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808061195990613e36565b9150506118a2565b5060005b8251811015611a2e5782818151811061198157611980613d62565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000028483815181106119de576119dd613d62565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508180611a1890613e36565b9250508080611a2690613e36565b915050611965565b50829350505050919050565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60098054611ab490613d31565b80601f0160208091040260200160405190810160405280929190818152602001828054611ae090613d31565b8015611b2d5780601f10611b0257610100808354040283529160200191611b2d565b820191906000526020600020905b815481529060010190602001808311611b1057829003601f168201915b505050505081565b8015611c5657600073ffffffffffffffffffffffffffffffffffffffff16600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bd357600080fd5b81600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611d6e565b600073ffffffffffffffffffffffffffffffffffffffff16600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611cee57600080fd5b6000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611dcb9190613416565b60405180910390a35050565b60008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611e7d5750600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611e8657600080fd5b6001600460008581526020019081526020016000208054905014611ea957600080fd5b600060046000858152602001908152602001600020600081548110611ed157611ed0613d62565b5b9060005260206000200160000160009054906101000a900465ffffffffffff1665ffffffffffff1614611f0357600080fd5b6000600102600560008581526020019081526020016000205414611f2657600080fd5b8373ffffffffffffffffffffffffffffffffffffffff1690507fc000000000000000000000000000000000000000000000000000000000000000811790508060010260056000858152602001908152602001600020819055506001600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fcf9190613e02565b925050819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f8856001900460405161203791906135b1565b60405180910390a38291505092915050565b600b5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146120aa57600080fd5b600260009054906101000a900460ff16156120c457600080fd5b81156120e6576001600260006101000a81548160ff0219169083151502179055505b826000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001905092915050565b61213b848484612ca5565b818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f75c9e114f073c346aac7d1d7e9a3c3c14edabcdd27de07d1d9e425f45d318c5e846121f0906141c7565b6040516121fd91906136bd565b60405180910390a450505050565b6060600082600102905060006004600083815260200190815260200160002080549050036122465761223c81612bf9565b9050806001900492505b600060046000838152602001908152602001600020805490501161226957600080fd5b61227583600102611821565b915050919050565b6060806060600061228d85610be0565b9150604767ffffffffffffffff8111156122aa576122a9613786565b5b6040519080825280601f01601f1916602001820160405280156122dc5781602001600182028036833780820191505090505b5092507f73000000000000000000000000000000000000000000000000000000000000008360008151811061231457612313613d62565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f68000000000000000000000000000000000000000000000000000000000000008360018151811061237857612377613d62565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f6100000000000000000000000000000000000000000000000000000000000000836002815181106123dc576123db613d62565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f3200000000000000000000000000000000000000000000000000000000000000836003815181106124405761243f613d62565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f3500000000000000000000000000000000000000000000000000000000000000836004815181106124a4576124a3613d62565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f36000000000000000000000000000000000000000000000000000000000000008360058151811061250857612507613d62565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f3a000000000000000000000000000000000000000000000000000000000000008360068151811061256c5761256b613d62565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506007905060005b604081101561266b578281815181106125be576125bd613d62565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f01000000000000000000000000000000000000000000000000000000000000000284838151811061261b5761261a613d62565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350818061265590613e36565b925050808061266390613e36565b9150506125a2565b50829350505050919050565b600080600460008581526020019081526020016000208361ffff16815481106126a3576126a2613d62565b5b90600052602060002001905080600001600c9054906101000a900460ff1615612701576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f89061427a565b60405180910390fd5b60008361ffff16148015612733575060008160000160009054906101000a900465ffffffffffff1665ffffffffffff16145b156127925760018160000160068282829054906101000a900465ffffffffffff1661275e919061429a565b92506101000a81548165ffffffffffff021916908365ffffffffffff16021790555061278a8585611dd7565b9150506128e3565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806128355750600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612874576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286b90614182565b60405180910390fd5b8060000160009054906101000a900465ffffffffffff1665ffffffffffff168160000160069054906101000a900465ffffffffffff1665ffffffffffff16106128bc57600080fd5b6128df8585858460000160069054906101000a900465ffffffffffff1685612fbc565b9150505b9392505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612978576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296f90614182565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60008173ffffffffffffffffffffffffffffffffffffffff16600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614905092915050565b600080600460008681526020019081526020016000208461ffff1681548110612a9657612a95613d62565b5b90600052602060002001905060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480612b455750600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612b84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7b90614182565b60405180910390fd5b60008160000160009054906101000a900465ffffffffffff1665ffffffffffff1611612baf57600080fd5b8060000160009054906101000a900465ffffffffffff1665ffffffffffff168365ffffffffffff1610612be157600080fd5b612bee8686868685612fbc565b915050949350505050565b60008060056000848152602001908152602001600020549050612c1b8161323a565b612c2457600080fd5b612c2d8161326c565b15612c3b5782915050612ca0565b7effffffffffffffff00000000000000000000000000000000000000000000006001028116905060b881908060020a820491505090507fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000600102831681179050809150505b919050565b60003073ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401612cfc91906135b1565b602060405180830381865afa158015612d19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d3d91906142e9565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612d7757600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614612eab573373ffffffffffffffffffffffffffffffffffffffff166006600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480612ea157503373ffffffffffffffffffffffffffffffffffffffff16600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b612eaa57600080fd5b5b60006006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612f08828461329e565b6001600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f589190613e7e565b925050819055506001600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612faf9190613e02565b9250508190555050505050565b6000806000807fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008860019004169250603067ffffffffffffffff8861ffff161667ffffffffffffffff169060020a0267ffffffffffffffff16831792508565ffffffffffff1683179250826001029050600060010260056000838152602001908152602001600020541461304f57600080fd5b84600001600c9054906101000a900460ff166130b1578460000160069054906101000a900465ffffffffffff1665ffffffffffff168665ffffffffffff16146130b057600185600001600c6101000a81548160ff0219169083151502179055505b5b67ffffffffffffffff886001900416915060b8829060020a0291507f8000000000000000000000000000000000000000000000000000000000000000821791508873ffffffffffffffffffffffffffffffffffffffff168217915060018560000160068282829054906101000a900465ffffffffffff16613132919061429a565b92506101000a81548165ffffffffffff021916908365ffffffffffff1602179055508160010260056000838152602001908152602001600020819055506001600d60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131bf9190613e02565b925050819055508873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f88560405161322391906135b1565b60405180910390a380935050505095945050505050565b6000807f8000000000000000000000000000000000000000000000000000000000000000836001900416119050919050565b6000807f4000000000000000000000000000000000000000000000000000000000000000836001900416119050919050565b6000808360010290506005600082815260200190815260200160002054600190049150600082036132ce57600080fd5b7fffffffffffffffffffffffff0000000000000000000000000000000000000000821691508273ffffffffffffffffffffffffffffffffffffffff168217915081600102600560008381526020019081526020016000208190555050505050565b6040518060600160405280600065ffffffffffff168152602001600065ffffffffffff1681526020016000151581525090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6133ab81613376565b81146133b657600080fd5b50565b6000813590506133c8816133a2565b92915050565b6000602082840312156133e4576133e361336c565b5b60006133f2848285016133b9565b91505092915050565b60008115159050919050565b613410816133fb565b82525050565b600060208201905061342b6000830184613407565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561346b578082015181840152602081019050613450565b60008484015250505050565b6000601f19601f8301169050919050565b600061349382613431565b61349d818561343c565b93506134ad81856020860161344d565b6134b681613477565b840191505092915050565b600060208201905081810360008301526134db8184613488565b905092915050565b6000819050919050565b6134f6816134e3565b811461350157600080fd5b50565b600081359050613513816134ed565b92915050565b60006020828403121561352f5761352e61336c565b5b600061353d84828501613504565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061357182613546565b9050919050565b61358181613566565b82525050565b600060208201905061359c6000830184613578565b92915050565b6135ab816134e3565b82525050565b60006020820190506135c660008301846135a2565b92915050565b6135d581613566565b81146135e057600080fd5b50565b6000813590506135f2816135cc565b92915050565b6000806000606084860312156136115761361061336c565b5b600061361f868287016135e3565b9350506020613630868287016135e3565b925050604061364186828701613504565b9150509250925092565b6000819050919050565b61365e8161364b565b811461366957600080fd5b50565b60008135905061367b81613655565b92915050565b6000602082840312156136975761369661336c565b5b60006136a58482850161366c565b91505092915050565b6136b78161364b565b82525050565b60006020820190506136d260008301846136ae565b92915050565b6000602082840312156136ee576136ed61336c565b5b60006136fc848285016135e3565b91505092915050565b600081519050919050565b600082825260208201905092915050565b600061372c82613705565b6137368185613710565b935061374681856020860161344d565b61374f81613477565b840191505092915050565b600060208201905081810360008301526137748184613721565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6137be82613477565b810181811067ffffffffffffffff821117156137dd576137dc613786565b5b80604052505050565b60006137f0613362565b90506137fc82826137b5565b919050565b600067ffffffffffffffff82111561381c5761381b613786565b5b61382582613477565b9050602081019050919050565b82818337600083830152505050565b600061385461384f84613801565b6137e6565b9050828152602081018484840111156138705761386f613781565b5b61387b848285613832565b509392505050565b600082601f8301126138985761389761377c565b5b81356138a8848260208601613841565b91505092915050565b6000602082840312156138c7576138c661336c565b5b600082013567ffffffffffffffff8111156138e5576138e4613371565b5b6138f184828501613883565b91505092915050565b600065ffffffffffff82169050919050565b613915816138fa565b811461392057600080fd5b50565b6000813590506139328161390c565b92915050565b6000806040838503121561394f5761394e61336c565b5b600061395d8582860161366c565b925050602061396e85828601613923565b9150509250929050565b6000806040838503121561398f5761398e61336c565b5b600061399d8582860161366c565b92505060206139ae85828601613504565b9150509250929050565b6139c1816138fa565b82525050565b60006060820190506139dc60008301866139b8565b6139e960208301856139b8565b6139f66040830184613407565b949350505050565b613a07816133fb565b8114613a1257600080fd5b50565b600081359050613a24816139fe565b92915050565b60008060408385031215613a4157613a4061336c565b5b6000613a4f858286016135e3565b9250506020613a6085828601613a15565b9150509250929050565b60008060408385031215613a8157613a8061336c565b5b6000613a8f858286016135e3565b9250506020613aa08582860161366c565b9150509250929050565b600067ffffffffffffffff821115613ac557613ac4613786565b5b613ace82613477565b9050602081019050919050565b6000613aee613ae984613aaa565b6137e6565b905082815260208101848484011115613b0a57613b09613781565b5b613b15848285613832565b509392505050565b600082601f830112613b3257613b3161377c565b5b8135613b42848260208601613adb565b91505092915050565b60008060008060808587031215613b6557613b6461336c565b5b6000613b73878288016135e3565b9450506020613b84878288016135e3565b9350506040613b9587828801613504565b925050606085013567ffffffffffffffff811115613bb657613bb5613371565b5b613bc287828801613b1d565b91505092959194509250565b600061ffff82169050919050565b613be581613bce565b8114613bf057600080fd5b50565b600081359050613c0281613bdc565b92915050565b600080600060608486031215613c2157613c2061336c565b5b6000613c2f868287016135e3565b9350506020613c408682870161366c565b9250506040613c5186828701613bf3565b9150509250925092565b60008060408385031215613c7257613c7161336c565b5b6000613c80858286016135e3565b9250506020613c91858286016135e3565b9150509250929050565b60008060008060808587031215613cb557613cb461336c565b5b6000613cc3878288016135e3565b9450506020613cd48782880161366c565b9350506040613ce587828801613bf3565b9250506060613cf687828801613923565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613d4957607f821691505b602082108103613d5c57613d5b613d02565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff82169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613dd882613d91565b9150613de383613d91565b9250828201905060ff811115613dfc57613dfb613d9e565b5b92915050565b6000613e0d826134e3565b9150613e18836134e3565b9250828201905080821115613e3057613e2f613d9e565b5b92915050565b6000613e41826134e3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613e7357613e72613d9e565b5b600182019050919050565b6000613e89826134e3565b9150613e94836134e3565b9250828203905081811115613eac57613eab613d9e565b5b92915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b60008160020a8302905092915050565b600060088302613f177fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613ed7565b613f218683613ed7565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613f5e613f59613f54846134e3565b613f39565b6134e3565b9050919050565b6000819050919050565b613f7883613f43565b613f8c613f8482613f65565b848454613ee7565b825550505050565b600090565b613fa1613f94565b613fac818484613f6f565b505050565b5b81811015613fd057613fc5600082613f99565b600181019050613fb2565b5050565b601f82111561401557613fe681613eb2565b613fef84613ec7565b81016020851015613ffe578190505b61401261400a85613ec7565b830182613fb1565b50505b505050565b60008160020a8304905092915050565b600061403b6000198460080261401a565b1980831691505092915050565b6000614054838361402a565b9150826002028217905092915050565b61406d82613705565b67ffffffffffffffff81111561408657614085613786565b5b6140908254613d31565b61409b828285613fd4565b600060209050601f8311600181146140ce57600084156140bc578287015190505b6140c68582614048565b86555061412e565b601f1984166140dc86613eb2565b60005b82811015614104578489015182556001820191506020850194506020810190506140df565b86831015614121578489015161411d601f89168261402a565b8355505b6001600288020188555050505b505050505050565b7f4552525f41434345535300000000000000000000000000000000000000000000600082015250565b600061416c600a8361343c565b915061417782614136565b602082019050919050565b6000602082019050818103600083015261419b8161415f565b9050919050565b6000819050602082019050919050565b60006141be825161364b565b80915050919050565b60006141d282613705565b826141dc846141a2565b90506141e7816141b2565b92506020821015614227576142227fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83602003600802613ed7565b831692505b5050919050565b7f4552525f53504152534500000000000000000000000000000000000000000000600082015250565b6000614264600a8361343c565b915061426f8261422e565b602082019050919050565b6000602082019050818103600083015261429381614257565b9050919050565b60006142a5826138fa565b91506142b0836138fa565b9250828201905065ffffffffffff8111156142ce576142cd613d9e565b5b92915050565b6000815190506142e3816135cc565b92915050565b6000602082840312156142ff576142fe61336c565b5b600061430d848285016142d4565b9150509291505056fea26469706673582212204235583eebf0cfd99f05220e5354f31f29b8b9ae20e7b65bba13503dfb020bbb64736f6c63430008120033
+\ No newline at end of file
diff --git a/js/qrread.html b/js/qrread.html
@@ -76,6 +76,19 @@ window.addEventListener('load', () => {
window.dispatchEvent(e);
window.dispatchEvent(ee);
});
+ document.getElementById('scanReturn').addEventListener("click", (o) => {
+ const e = new CustomEvent('uistate', {
+ detail: {
+ delta: STATE.SCAN_DONE,
+ settings: settings,
+ },
+ bubbles: true,
+ cancelable: true,
+ composed: false,
+ });
+ window.dispatchEvent(e);
+ });
+
document.getElementById('scanConfirm').addEventListener("click", (o) => {
const e = new CustomEvent('uistate', {
detail: {
@@ -88,6 +101,11 @@ window.addEventListener('load', () => {
});
window.dispatchEvent(e);
});
+ document.getElementById('scanManualMint').addEventListener("click", (o) => {
+ const addr = document.getElementById("scanAddress").value;
+ manualConfirmHandler(addr);
+ });
+
setStatus('waiting for wallet', STATUS_BUSY);
});
@@ -97,60 +115,64 @@ window.addEventListener('load', () => {
<dt>Status</dt>
<dd><span id="statusText" class="statusBusy">Initializing...</span></dd>
</dl>
- <div class="pane" id="start">
- <label for="keyFile">Keyfile JSON text</label>
- <textarea cols="80" rows="24" id="keyFile"></textarea>
- <label for="keyFilePassword">Keyfile passphrase</label>
- <input type="password" id="keyFilePassword" />
- <button id="keyFileSubmit">unlock wallet</button>
- </div>
- <div class="pane" id="connect">
- <label for="chainRpcUrl">RPC URL</label>
- <input type="text" id="chainRpcUrl" value="http://localhost:8545" />
- <label for="chainId">Chain ID</label>
- <input type="text" id="chainId" />
- <label for="metaUrl">Data URL (optional)</label>
- <input type="text" id="metaUrl" value="" />
- <button id="chainSubmit">connect to network</button>
- </div>
- <div class="pane" id="contract">
- <label for="contractAddress">NFT Contract address</label>
- <input type="text" id="contractAddress" size="42" />
- <label for="voucherAddress">Voucher address</label>
- <input type="text" id="voucherAddress" size="42" />
+ <div id="setup">
+ <div class="pane" id="start">
+ <label for="keyFile">Keyfile JSON text</label>
+ <textarea cols="80" rows="24" id="keyFile"></textarea>
+ <label for="keyFilePassword">Keyfile passphrase</label>
+ <input type="password" id="keyFilePassword" />
+ <button id="keyFileSubmit">unlock wallet</button>
+ </div>
+ <div class="pane" id="connect">
+ <label for="chainRpcUrl">RPC URL</label>
+ <input type="text" id="chainRpcUrl" value="http://localhost:8545" />
+ <label for="chainId">Chain ID</label>
+ <input type="text" id="chainId" />
+ <label for="metaUrl">Data URL (optional)</label>
+ <input type="text" id="metaUrl" value="" />
+ <button id="chainSubmit">connect to network</button>
+ </div>
+ <div class="pane" id="contract">
+ <label for="contractAddress">NFT Contract address</label>
+ <input type="text" id="contractAddress" size="42" />
+ <label for="voucherAddress">Voucher address</label>
+ <input type="text" id="voucherAddress" size="42" />
- <button id="contractSubmit">connect to contract</button>
- </div>
- <div class="pane" id="product">
- <label for="requestTokenChooser">Choose NFT token</label>
- <div id="tokenChooser"></div>
- <label for="requestAmount">Choose mint amount</label>
- <select id="requestAmount"></select>
- <button id="requestSubmit">create request</button>
- </div>
- <div class="pane" id="read">
- <h2>Mint token(s)</h2>
- <dl>
- <dt>Token Id</dt>
- <dd id="scanTokenId"></dd>
- <dt>Token Name</dt>
- <dd id="scanTokenMetaName">(unavailable)</dd>
- <dt>Token Description</dt>
- <dd id="scanTokenMetaDescription">(unavailable)</dd>
- <dt>Batch</dt>
- <dd id="scanTokenBatch"></dd>
- <dt>Amount</dt>
- <dd id="scanTokenAmount"></dd>
- </dl>
- <div class="out">
- <canvas id="qr-canvas" width="400" height="400"></canvas>
+ <button id="contractSubmit">connect to contract</button>
</div>
- <label for="scanAddress">Recipient address</label>
- <input type="text" id="scanAddress" size="42" />
- <ol id="txList"></ol>
- <button id="scanManualMint">mint</button>
- <button id="scanConfirm">confirm</button>
- <button id="scanAbort">abort</button>
- <button id="scanReturn">return</button>
</div>
+ <div id="runtime">
+ <div class="pane" id="product">
+ <label for="requestTokenChooser">Choose NFT token</label>
+ <div id="tokenChooser"></div>
+ <label for="requestAmount">Choose mint amount</label>
+ <select id="requestAmount"></select>
+ <button id="requestSubmit">create request</button>
+ </div>
+ <div class="pane" id="read">
+ <h2>Mint token(s)</h2>
+ <dl>
+ <dt>Token Id</dt>
+ <dd id="scanTokenId"></dd>
+ <dt>Token Name</dt>
+ <dd id="scanTokenMetaName">(unavailable)</dd>
+ <dt>Token Description</dt>
+ <dd id="scanTokenMetaDescription">(unavailable)</dd>
+ <dt>Batch</dt>
+ <dd id="scanTokenBatch"></dd>
+ <dt>Amount</dt>
+ <dd id="scanTokenAmount"></dd>
+ </dl>
+ <div class="out">
+ <canvas id="qr-canvas" width="400" height="400"></canvas>
+ </div>
+ <label for="scanAddress">Recipient address</label>
+ <input type="text" id="scanAddress" size="42" />
+ <ol id="txList"></ol>
+ <button id="scanManualMint">mint</button>
+ <button id="scanConfirm">confirm</button>
+ <button id="scanAbort">abort</button>
+ <button id="scanReturn">return</button>
+ </div>
+ <div>
</html>
diff --git a/js/qrread.js b/js/qrread.js
@@ -57,6 +57,25 @@ const txBaseERC20 = {
chainId: 5050,
}
+function checkAddress(addr) {
+ if (addr.length < 40) {
+ console.error('invalid ethereum address (too short)', addr);
+ return;
+ }
+ if (addr.substring(0, 9) == "ethereum:") { // metamask qr
+ addr = addr.substring(9);
+ }
+ if (addr.substring(0, 2) == "0x") {
+ addr = addr.substring(2);
+ }
+ const re = new RegExp("^[0-9a-fA-F]{40}$");
+ const m = addr.match(re);
+ if (m === null) {
+ throw 'invalid ethereum address (invalid hex or too long): ' + addr;
+ }
+ return addr;
+}
+
function checkState(stateCheck, exact) {
masked = state & stateCheck;
if (exact) {
@@ -165,14 +184,23 @@ async function keyFileHandler(v, passphrase) {
async function chainHandler(rpc, chainId) {
setStatus('connecting to network', STATUS_BUSY);
setTimeout(async () => {
- settings.provider = new ethers.providers.JsonRpcProvider("http://localhost:8545");
+ providerString = document.getElementById('chainRpcUrl').value;
+ settings.provider = new ethers.providers.JsonRpcProvider(providerString);
settings.wallet = settings.wallet.connect(settings.provider);
const network = await settings.provider.getNetwork();
console.debug('connected to network', network, settings.provider);
if (network.chainId != chainId) {
throw 'chainId mismatch, requested ' + chainId + ', got ' + network.chainId;
}
- settings.chainId = chainId;
+ // TODO: get chainid for txbase from settings directly
+ settings.chainId = parseInt(chainId);
+ txBase.chainId = settings.chainId;
+ txBaseERC20.chainId = settings.chainId;
+
+ const gasPrice = await settings.provider.getGasPrice();
+ txBase.gasPrice = parseInt(gasPrice);
+ txBaseERC20.gasPrice = parseInt(gasPrice);
+
state |= STATE.CHAIN_SETTINGS;
const e = new CustomEvent('uistate', {
detail: {
@@ -356,6 +384,35 @@ async function scanTokenMetadata(tokenId) {
document.getElementById('scanTokenMetaDescription').innerHTML = o['description'];
}
+async function manualConfirmHandler(addr) {
+ try {
+ settings.recipient = checkAddress(addr);
+ } catch(e) {
+ console.error(e);
+ return;
+ }
+ const e = new CustomEvent('uistate', {
+ detail: {
+ delta: STATE.SCAN_STOP,
+ settings: settings,
+ },
+ bubbles: true,
+ cancelable: true,
+ composed: false,
+ });
+ window.dispatchEvent(e);
+ const ee = new CustomEvent('uistate', {
+ detail: {
+ delta: STATE.SCAN_CONFIRM,
+ settings: settings,
+ },
+ bubbles: true,
+ cancelable: true,
+ composed: false,
+ });
+ window.dispatchEvent(ee);
+}
+
async function requestHandler(tokenBatch, amount) {
const v = tokenBatch.split('.');
let batchNumberHex = "0000000000000000000000000000000000000000000000000000000000000000" + v[1].toString(16);
@@ -384,4 +441,3 @@ const nftAbi = [{"inputs":[{"internalType":"string","name":"_name","type":"strin
const erc20Abi = [{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":true,"internalType":"address","name":"_spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"TransferFrom","type":"event"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_holder","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}];
-
diff --git a/js/qrread_ui.js b/js/qrread_ui.js
@@ -60,6 +60,8 @@ window.addEventListener('uistate', (e) => {
updateSettingsView('Voucher decimals', e.detail.settings.voucherDecimals);
document.getElementById("contract").style.display = "none";
document.getElementById("product").style.display = "block";
+ document.getElementById("setup").style.display = "none";
+ document.getElementById("runtime").style.display = "block";
break;
case STATE.MINT:
document.getElementById("scanTokenId").innerHTML = settings.tokenId;
@@ -82,14 +84,21 @@ window.addEventListener('uistate', (e) => {
window.stream.getTracks().forEach(track => track.stop());
break;
case STATE.SCAN_CONFIRM:
+ document.getElementById('scanAddress').value = e.detail.settings.recipient;
+ document.getElementById("scanManualMint").style.display = "none";
document.getElementById("scanConfirm").style.display = "none";
+ document.getElementById("scanAbort").style.display = "none";
+ document.getElementById("scanReturn").style.display = "block";
signAndSend();
break;
case STATE.SCAN_DONE:
document.getElementById("read").style.display = "none";
document.getElementById("product").style.display = "block";
- document.getElementById("scanAbort").style.display = "none";
- document.getElementById("scanReturn").style.display = "block";
+ document.getElementById("scanAddress").value = "";
+ const txList = document.getElementById("txList");
+ while (txList.lastChild !== null) {
+ txList.removeChild(txList.lastChild);
+ }
break;
case STATE.AIEE:
throw 'execution terminated';
@@ -202,24 +211,12 @@ function scan() {
const code = jsQR(imageData, 400, 400);
if (code) {
console.log("Found QR code", code);
- let addr = code.data;
- if (addr.length < 40) {
- console.error('invalid ethereum address (too short)', addr);
- return;
- }
- if (addr.substring(0, 9) == "ethereum:") { // metamask qr
- addr = addr.substring(9);
- }
- if (addr.substring(0, 2) == "0x") {
- addr = addr.substring(2);
- }
- const re = new RegExp("^[0-9a-fA-F]{40}$");
- const m = addr.match(re);
- if (m === null) {
- console.error('invalid ethereum address (invalid hex or too long)', addr);
+ try {
+ settings.recipient = checkAddress(code.data);
+ } catch(e) {
+ console.error(e);
return;
}
- settings.recipient = addr;
const e = new CustomEvent('uistate', {
detail: {
delta: STATE.SCAN_RESULT,
diff --git a/js/style.css b/js/style.css
@@ -1,4 +1,5 @@
-div.pane {
+div.pane,
+div#runtime {
display: none;
}
diff --git a/python/craft_nft/data/CraftNFT.bin b/python/craft_nft/data/CraftNFT.bin
@@ -1 +1 @@
-60806040523480156200001157600080fd5b506040516200489938038062004899833981810160405281019062000037919062000279565b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600b8190555082600890816200008f919062000564565b508160099081620000a1919062000564565b505050506200064b565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200011482620000c9565b810181811067ffffffffffffffff82111715620001365762000135620000da565b5b80604052505050565b60006200014b620000ab565b905062000159828262000109565b919050565b600067ffffffffffffffff8211156200017c576200017b620000da565b5b6200018782620000c9565b9050602081019050919050565b60005b83811015620001b457808201518184015260208101905062000197565b60008484015250505050565b6000620001d7620001d1846200015e565b6200013f565b905082815260208101848484011115620001f657620001f5620000c4565b5b6200020384828562000194565b509392505050565b600082601f830112620002235762000222620000bf565b5b815162000235848260208601620001c0565b91505092915050565b6000819050919050565b62000253816200023e565b81146200025f57600080fd5b50565b600081519050620002738162000248565b92915050565b600080600060608486031215620002955762000294620000b5565b5b600084015167ffffffffffffffff811115620002b657620002b5620000ba565b5b620002c4868287016200020b565b935050602084015167ffffffffffffffff811115620002e857620002e7620000ba565b5b620002f6868287016200020b565b9250506040620003098682870162000262565b9150509250925092565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200036657607f821691505b6020821081036200037c576200037b6200031e565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b60008160020a8302905092915050565b600060088302620003e97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620003a7565b620003f58683620003a7565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620004426200043c62000436846200040d565b62000417565b6200040d565b9050919050565b6000819050919050565b6200045e8362000421565b620004766200046d8262000449565b848454620003b7565b825550505050565b600090565b6200048d6200047e565b6200049a81848462000453565b505050565b5b81811015620004c257620004b660008262000483565b600181019050620004a0565b5050565b601f8211156200051157620004db8162000382565b620004e68462000397565b81016020851015620004f6578190505b6200050e620005058562000397565b8301826200049f565b50505b505050565b60008160020a8304905092915050565b6000620005396000198460080262000516565b1980831691505092915050565b600062000554838362000526565b9150826002028217905092915050565b6200056f8262000313565b67ffffffffffffffff8111156200058b576200058a620000da565b5b6200059782546200034d565b620005a4828285620004c6565b600060209050601f831160018114620005dc5760008415620005c7578287015190505b620005d3858262000546565b86555062000643565b601f198416620005ec8662000382565b60005b828110156200061657848901518255600182019150602085019450602081019050620005ef565b8683101562000636578489015162000632601f89168262000526565b8355505b6001600288020188555050505b505050505050565b61423e806200065b6000396000f3fe608060405260043610610200576000357c01000000000000000000000000000000000000000000000000000000009004806369e85c711161011f578063b88d4fde116100b2578063da2824a811610081578063da2824a8146107a8578063e985e9c5146107d1578063f117e1731461080e578063f9613ab21461084b57610200565b8063b88d4fde146106d5578063c87b56dd146106f1578063c9796c391461072e578063d824ee4f1461076b57610200565b8063a22cb465116100ee578063a22cb46514610607578063adf288df14610630578063b1a6afd31461066d578063b242e5341461069857610200565b806369e85c711461053757806370a08231146105745780638da5cb5b146105b157806395d89b41146105dc57610200565b806340c84b0e116101975780634f64b2be116101665780634f64b2be14610455578063559f5dc9146104925780635ae06f7e146104d15780636352211e146104fa57610200565b806340c84b0e146103a857806342842e0e146103d357806349f2553a146103ef5780634d03546a1461041857610200565b806323b872dd116101d357806323b872dd146102d557806324e0febc146102f15780632b29ba231461032e5780633fd2f5931461036b57610200565b806301ffc9a71461020557806306fdde0314610242578063081812fc1461026d57806318160ddd146102aa575b600080fd5b34801561021157600080fd5b5061022c6004803603810190610227919061332c565b610888565b6040516102399190613374565b60405180910390f35b34801561024e57600080fd5b506102576109dc565b604051610264919061341f565b60405180910390f35b34801561027957600080fd5b50610294600480360381019061028f9190613477565b610a6a565b6040516102a191906134e5565b60405180910390f35b3480156102b657600080fd5b506102bf610aa7565b6040516102cc919061350f565b60405180910390f35b6102ef60048036038101906102ea9190613556565b610ab1565b005b3480156102fd57600080fd5b50610318600480360381019061031391906135df565b610b1c565b604051610325919061361b565b60405180910390f35b34801561033a57600080fd5b5061035560048036038101906103509190613636565b610b34565b6040516103629190613374565b60405180910390f35b34801561037757600080fd5b50610392600480360381019061038d91906135df565b610be0565b60405161039f91906136b8565b60405180910390f35b3480156103b457600080fd5b506103bd610f3f565b6040516103ca91906136b8565b60405180910390f35b6103ed60048036038101906103e89190613556565b610fcd565b005b3480156103fb57600080fd5b506104166004803603810190610411919061380f565b611038565b005b34801561042457600080fd5b5061043f600480360381019061043a9190613896565b611350565b60405161044c9190613374565b60405180910390f35b34801561046157600080fd5b5061047c60048036038101906104779190613477565b61162e565b604051610489919061361b565b60405180910390f35b34801561049e57600080fd5b506104b960048036038101906104b491906138d6565b611652565b6040516104c893929190613925565b60405180910390f35b3480156104dd57600080fd5b506104f860048036038101906104f39190613636565b6116c6565b005b34801561050657600080fd5b50610521600480360381019061051c9190613477565b6117e5565b60405161052e91906134e5565b60405180910390f35b34801561054357600080fd5b5061055e600480360381019061055991906135df565b611821565b60405161056b919061341f565b60405180910390f35b34801561058057600080fd5b5061059b60048036038101906105969190613636565b611a3a565b6040516105a8919061350f565b60405180910390f35b3480156105bd57600080fd5b506105c6611a83565b6040516105d391906134e5565b60405180910390f35b3480156105e857600080fd5b506105f1611aa7565b6040516105fe919061341f565b60405180910390f35b34801561061357600080fd5b5061062e60048036038101906106299190613988565b611b35565b005b34801561063c57600080fd5b50610657600480360381019061065291906139c8565b611dd7565b604051610664919061361b565b60405180910390f35b34801561067957600080fd5b50610682612049565b60405161068f919061361b565b60405180910390f35b3480156106a457600080fd5b506106bf60048036038101906106ba9190613988565b61204f565b6040516106cc9190613374565b60405180910390f35b6106ef60048036038101906106ea9190613aa9565b612130565b005b3480156106fd57600080fd5b5061071860048036038101906107139190613477565b61220b565b604051610725919061341f565b60405180910390f35b34801561073a57600080fd5b50610755600480360381019061075091906135df565b61227d565b604051610762919061341f565b60405180910390f35b34801561077757600080fd5b50610792600480360381019061078d9190613b66565b612677565b60405161079f919061361b565b60405180910390f35b3480156107b457600080fd5b506107cf60048036038101906107ca9190613636565b61287e565b005b3480156107dd57600080fd5b506107f860048036038101906107f39190613bb9565b612966565b6040516108059190613374565b60405180910390f35b34801561081a57600080fd5b5061083560048036038101906108309190613bf9565b6129fe565b604051610842919061361b565b60405180910390f35b34801561085757600080fd5b50610872600480360381019061086d91906135df565b612b57565b60405161087f919061361b565b60405180910390f35b60006380ac58cd7c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036108dc57600190506109d7565b635b5e139f7c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19160361092e57600190506109d7565b63449a52f87c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19160361098057600190506109d7565b6301ffc9a77c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036109d257600190506109d7565b600090505b919050565b600880546109e990613c8f565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1590613c8f565b8015610a625780601f10610a3757610100808354040283529160200191610a62565b820191906000526020600020905b815481529060010190602001808311610a4557829003601f168201915b505050505081565b60006006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600a54905090565b610abc838383612c03565b808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60056020528060005260406000206000915090505481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680610bd9575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b9050919050565b606080600080604067ffffffffffffffff811115610c0157610c006136e4565b5b6040519080825280601f01601f191660200182016040528015610c335781602001600182028036833780820191505090505b5092506000905060005b6020811015610f3357600460f0878360208110610c5d57610c5c613cc0565b5b1a7f0100000000000000000000000000000000000000000000000000000000000000027f010000000000000000000000000000000000000000000000000000000000000090041660ff16908060020a82049150509250600a8360ff161015610d3557603083610ccc9190613d2b565b7f010000000000000000000000000000000000000000000000000000000000000002848381518110610d0157610d00613cc0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350610da7565b605783610d429190613d2b565b7f010000000000000000000000000000000000000000000000000000000000000002848381518110610d7757610d76613cc0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b600f868260208110610dbc57610dbb613cc0565b5b1a7f0100000000000000000000000000000000000000000000000000000000000000027f01000000000000000000000000000000000000000000000000000000000000009004169250600a8360ff161015610e9357603083610e1e9190613d2b565b7f01000000000000000000000000000000000000000000000000000000000000000284600184610e4e9190613d60565b81518110610e5f57610e5e613cc0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350610f11565b605783610ea09190613d2b565b7f01000000000000000000000000000000000000000000000000000000000000000284600184610ed09190613d60565b81518110610ee157610ee0613cc0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b600282610f1e9190613d60565b91508080610f2b90613d94565b915050610c3d565b50829350505050919050565b600c8054610f4c90613c8f565b80601f0160208091040260200160405190810160405280929190818152602001828054610f7890613c8f565b8015610fc55780601f10610f9a57610100808354040283529160200191610fc5565b820191906000526020600020905b815481529060010190602001808311610fa857829003601f168201915b505050505081565b610fd8838383612c03565b808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b606060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461109557600080fd5b82915081519050602f7f010000000000000000000000000000000000000000000000000000000000000002826001836110ce9190613ddc565b815181106110df576110de613cc0565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461115f57808061115b90613d94565b9150505b8067ffffffffffffffff811115611179576111786136e4565b5b6040519080825280601f01601f1916602001820160405280156111ab5781602001600182028036833780820191505090505b50600c90816111ba9190613fc2565b5060005b82518110156112ab578281815181106111da576111d9613cc0565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002600c82815461123290613c8f565b811061124157611240613cc0565b5b8154600116156112605790600052602060002090602091828204019190065b601f036101000a81548160ff021916907f01000000000000000000000000000000000000000000000000000000000000008404021790555080806112a390613d94565b9150506111be565b508151811461134b577f2f00000000000000000000000000000000000000000000000000000000000000600c835181546112e490613c8f565b81106112f3576112f2613cc0565b5b8154600116156113125790600052602060002090602091828204019190065b601f036101000a81548160ff021916907f0100000000000000000000000000000000000000000000000000000000000000840402179055505b505050565b60008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806113f65750600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6113ff57600080fd5b61140761328d565b6004600086815260200190815260200160002080549050915060008211156114845760006004600087815260200190815260200160002060008154811061145157611450613cc0565b5b9060005260206000200160000160009054906101000a900465ffffffffffff1665ffffffffffff161161148357600080fd5b5b83816000019065ffffffffffff16908165ffffffffffff168152505060046000868152602001908152602001600020819080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548165ffffffffffff021916908365ffffffffffff16021790555060208201518160000160066101000a81548165ffffffffffff021916908365ffffffffffff160217905550604082015181600001600c6101000a81548160ff0219169083151502179055505050600385908060018154018082558091505060019003906000526020600020016000909190919091505560008465ffffffffffff16036115a9576001600a600082825461159d9190613d60565b925050819055506115cb565b8365ffffffffffff16600a60008282546115c39190613d60565b925050819055505b8365ffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fb85ba54b9f6f8241b7e1499e3cfc186ac0b1c8b7100f599bf6ca6844f896c3428760405161161a919061361b565b60405180910390a360019250505092915050565b6003818154811061163e57600080fd5b906000526020600020016000915090505481565b6004602052816000526040600020818154811061166e57600080fd5b90600052602060002001600091509150508060000160009054906101000a900465ffffffffffff16908060000160069054906101000a900465ffffffffffff169080600001600c9054906101000a900460ff16905083565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061174b575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61178a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611781906140e0565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600080600560008460010281526020019081526020016000205490506060819060020a026c010000000000000000000000009004915050919050565b6060806060600061183185610be0565b9150600c805461184090613c8f565b905090508082516118519190613d60565b67ffffffffffffffff81111561186a576118696136e4565b5b6040519080825280601f01601f19166020018201604052801561189c5781602001600182028036833780820191505090505b50925060005b8181101561196157600c8181546118b890613c8f565b81106118c7576118c6613cc0565b5b8154600116156118e65790600052602060002090602091828204019190065b9054901a7f01000000000000000000000000000000000000000000000000000000000000000284828151811061191f5761191e613cc0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808061195990613d94565b9150506118a2565b5060005b8251811015611a2e5782818151811061198157611980613cc0565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000028483815181106119de576119dd613cc0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508180611a1890613d94565b9250508080611a2690613d94565b915050611965565b50829350505050919050565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60098054611ab490613c8f565b80601f0160208091040260200160405190810160405280929190818152602001828054611ae090613c8f565b8015611b2d5780601f10611b0257610100808354040283529160200191611b2d565b820191906000526020600020905b815481529060010190602001808311611b1057829003601f168201915b505050505081565b8015611c5657600073ffffffffffffffffffffffffffffffffffffffff16600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bd357600080fd5b81600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611d6e565b600073ffffffffffffffffffffffffffffffffffffffff16600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611cee57600080fd5b6000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611dcb9190613374565b60405180910390a35050565b60008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611e7d5750600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611e8657600080fd5b6001600460008581526020019081526020016000208054905014611ea957600080fd5b600060046000858152602001908152602001600020600081548110611ed157611ed0613cc0565b5b9060005260206000200160000160009054906101000a900465ffffffffffff1665ffffffffffff1614611f0357600080fd5b6000600102600560008581526020019081526020016000205414611f2657600080fd5b8373ffffffffffffffffffffffffffffffffffffffff1690507fc000000000000000000000000000000000000000000000000000000000000000811790508060010260056000858152602001908152602001600020819055506001600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fcf9190613d60565b925050819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f88560019004604051612037919061350f565b60405180910390a38291505092915050565b600b5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146120aa57600080fd5b600260009054906101000a900460ff16156120c457600080fd5b81156120e6576001600260006101000a81548160ff0219169083151502179055505b826000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001905092915050565b61213b848484612c03565b818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f75c9e114f073c346aac7d1d7e9a3c3c14edabcdd27de07d1d9e425f45d318c5e846121f090614125565b6040516121fd919061361b565b60405180910390a450505050565b6060600082600102905060006004600083815260200190815260200160002080549050036122465761223c81612b57565b9050806001900492505b600060046000838152602001908152602001600020805490501161226957600080fd5b61227583600102611821565b915050919050565b6060806060600061228d85610be0565b9150604767ffffffffffffffff8111156122aa576122a96136e4565b5b6040519080825280601f01601f1916602001820160405280156122dc5781602001600182028036833780820191505090505b5092507f73000000000000000000000000000000000000000000000000000000000000008360008151811061231457612313613cc0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f68000000000000000000000000000000000000000000000000000000000000008360018151811061237857612377613cc0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f6100000000000000000000000000000000000000000000000000000000000000836002815181106123dc576123db613cc0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f3200000000000000000000000000000000000000000000000000000000000000836003815181106124405761243f613cc0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f3500000000000000000000000000000000000000000000000000000000000000836004815181106124a4576124a3613cc0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f36000000000000000000000000000000000000000000000000000000000000008360058151811061250857612507613cc0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f3a000000000000000000000000000000000000000000000000000000000000008360068151811061256c5761256b613cc0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506007905060005b604081101561266b578281815181106125be576125bd613cc0565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f01000000000000000000000000000000000000000000000000000000000000000284838151811061261b5761261a613cc0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350818061265590613d94565b925050808061266390613d94565b9150506125a2565b50829350505050919050565b600080600460008581526020019081526020016000208361ffff16815481106126a3576126a2613cc0565b5b90600052602060002001905080600001600c9054906101000a900460ff16156126cb57600080fd5b60008361ffff161480156126fd575060008160000160009054906101000a900465ffffffffffff1665ffffffffffff16145b1561275c5760018160000160068282829054906101000a900465ffffffffffff16612728919061418c565b92506101000a81548165ffffffffffff021916908365ffffffffffff1602179055506127548585611dd7565b915050612877565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806127ff5750600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61280857600080fd5b8060000160009054906101000a900465ffffffffffff1665ffffffffffff168160000160069054906101000a900465ffffffffffff1665ffffffffffff161061285057600080fd5b6128738585858460000160069054906101000a900465ffffffffffff1685612f1a565b9150505b9392505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461290c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612903906140e0565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60008173ffffffffffffffffffffffffffffffffffffffff16600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614905092915050565b600080600460008681526020019081526020016000208461ffff1681548110612a2a57612a29613cc0565b5b90600052602060002001905060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480612ad95750600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612ae257600080fd5b60008160000160009054906101000a900465ffffffffffff1665ffffffffffff1611612b0d57600080fd5b8060000160009054906101000a900465ffffffffffff1665ffffffffffff168365ffffffffffff1610612b3f57600080fd5b612b4c8686868685612f1a565b915050949350505050565b60008060056000848152602001908152602001600020549050612b7981613198565b612b8257600080fd5b612b8b816131ca565b15612b995782915050612bfe565b7effffffffffffffff00000000000000000000000000000000000000000000006001028116905060b881908060020a820491505090507fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000600102831681179050809150505b919050565b60003073ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401612c5a919061350f565b602060405180830381865afa158015612c77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c9b91906141db565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612cd557600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614612e09573373ffffffffffffffffffffffffffffffffffffffff166006600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480612dff57503373ffffffffffffffffffffffffffffffffffffffff16600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b612e0857600080fd5b5b60006006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612e6682846131fc565b6001600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612eb69190613ddc565b925050819055506001600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f0d9190613d60565b9250508190555050505050565b6000806000807fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008860019004169250603067ffffffffffffffff8861ffff161667ffffffffffffffff169060020a0267ffffffffffffffff16831792508565ffffffffffff16831792508260010290506000600102600560008381526020019081526020016000205414612fad57600080fd5b84600001600c9054906101000a900460ff1661300f578460000160069054906101000a900465ffffffffffff1665ffffffffffff168665ffffffffffff161461300e57600185600001600c6101000a81548160ff0219169083151502179055505b5b67ffffffffffffffff886001900416915060b8829060020a0291507f8000000000000000000000000000000000000000000000000000000000000000821791508873ffffffffffffffffffffffffffffffffffffffff168217915060018560000160068282829054906101000a900465ffffffffffff16613090919061418c565b92506101000a81548165ffffffffffff021916908365ffffffffffff1602179055508160010260056000838152602001908152602001600020819055506001600d60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461311d9190613d60565b925050819055508873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f885604051613181919061350f565b60405180910390a380935050505095945050505050565b6000807f8000000000000000000000000000000000000000000000000000000000000000836001900416119050919050565b6000807f4000000000000000000000000000000000000000000000000000000000000000836001900416119050919050565b60008083600102905060056000828152602001908152602001600020546001900491506000820361322c57600080fd5b7fffffffffffffffffffffffff0000000000000000000000000000000000000000821691508273ffffffffffffffffffffffffffffffffffffffff168217915081600102600560008381526020019081526020016000208190555050505050565b6040518060600160405280600065ffffffffffff168152602001600065ffffffffffff1681526020016000151581525090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613309816132d4565b811461331457600080fd5b50565b60008135905061332681613300565b92915050565b600060208284031215613342576133416132ca565b5b600061335084828501613317565b91505092915050565b60008115159050919050565b61336e81613359565b82525050565b60006020820190506133896000830184613365565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156133c95780820151818401526020810190506133ae565b60008484015250505050565b6000601f19601f8301169050919050565b60006133f18261338f565b6133fb818561339a565b935061340b8185602086016133ab565b613414816133d5565b840191505092915050565b6000602082019050818103600083015261343981846133e6565b905092915050565b6000819050919050565b61345481613441565b811461345f57600080fd5b50565b6000813590506134718161344b565b92915050565b60006020828403121561348d5761348c6132ca565b5b600061349b84828501613462565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006134cf826134a4565b9050919050565b6134df816134c4565b82525050565b60006020820190506134fa60008301846134d6565b92915050565b61350981613441565b82525050565b60006020820190506135246000830184613500565b92915050565b613533816134c4565b811461353e57600080fd5b50565b6000813590506135508161352a565b92915050565b60008060006060848603121561356f5761356e6132ca565b5b600061357d86828701613541565b935050602061358e86828701613541565b925050604061359f86828701613462565b9150509250925092565b6000819050919050565b6135bc816135a9565b81146135c757600080fd5b50565b6000813590506135d9816135b3565b92915050565b6000602082840312156135f5576135f46132ca565b5b6000613603848285016135ca565b91505092915050565b613615816135a9565b82525050565b6000602082019050613630600083018461360c565b92915050565b60006020828403121561364c5761364b6132ca565b5b600061365a84828501613541565b91505092915050565b600081519050919050565b600082825260208201905092915050565b600061368a82613663565b613694818561366e565b93506136a48185602086016133ab565b6136ad816133d5565b840191505092915050565b600060208201905081810360008301526136d2818461367f565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61371c826133d5565b810181811067ffffffffffffffff8211171561373b5761373a6136e4565b5b80604052505050565b600061374e6132c0565b905061375a8282613713565b919050565b600067ffffffffffffffff82111561377a576137796136e4565b5b613783826133d5565b9050602081019050919050565b82818337600083830152505050565b60006137b26137ad8461375f565b613744565b9050828152602081018484840111156137ce576137cd6136df565b5b6137d9848285613790565b509392505050565b600082601f8301126137f6576137f56136da565b5b813561380684826020860161379f565b91505092915050565b600060208284031215613825576138246132ca565b5b600082013567ffffffffffffffff811115613843576138426132cf565b5b61384f848285016137e1565b91505092915050565b600065ffffffffffff82169050919050565b61387381613858565b811461387e57600080fd5b50565b6000813590506138908161386a565b92915050565b600080604083850312156138ad576138ac6132ca565b5b60006138bb858286016135ca565b92505060206138cc85828601613881565b9150509250929050565b600080604083850312156138ed576138ec6132ca565b5b60006138fb858286016135ca565b925050602061390c85828601613462565b9150509250929050565b61391f81613858565b82525050565b600060608201905061393a6000830186613916565b6139476020830185613916565b6139546040830184613365565b949350505050565b61396581613359565b811461397057600080fd5b50565b6000813590506139828161395c565b92915050565b6000806040838503121561399f5761399e6132ca565b5b60006139ad85828601613541565b92505060206139be85828601613973565b9150509250929050565b600080604083850312156139df576139de6132ca565b5b60006139ed85828601613541565b92505060206139fe858286016135ca565b9150509250929050565b600067ffffffffffffffff821115613a2357613a226136e4565b5b613a2c826133d5565b9050602081019050919050565b6000613a4c613a4784613a08565b613744565b905082815260208101848484011115613a6857613a676136df565b5b613a73848285613790565b509392505050565b600082601f830112613a9057613a8f6136da565b5b8135613aa0848260208601613a39565b91505092915050565b60008060008060808587031215613ac357613ac26132ca565b5b6000613ad187828801613541565b9450506020613ae287828801613541565b9350506040613af387828801613462565b925050606085013567ffffffffffffffff811115613b1457613b136132cf565b5b613b2087828801613a7b565b91505092959194509250565b600061ffff82169050919050565b613b4381613b2c565b8114613b4e57600080fd5b50565b600081359050613b6081613b3a565b92915050565b600080600060608486031215613b7f57613b7e6132ca565b5b6000613b8d86828701613541565b9350506020613b9e868287016135ca565b9250506040613baf86828701613b51565b9150509250925092565b60008060408385031215613bd057613bcf6132ca565b5b6000613bde85828601613541565b9250506020613bef85828601613541565b9150509250929050565b60008060008060808587031215613c1357613c126132ca565b5b6000613c2187828801613541565b9450506020613c32878288016135ca565b9350506040613c4387828801613b51565b9250506060613c5487828801613881565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613ca757607f821691505b602082108103613cba57613cb9613c60565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff82169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613d3682613cef565b9150613d4183613cef565b9250828201905060ff811115613d5a57613d59613cfc565b5b92915050565b6000613d6b82613441565b9150613d7683613441565b9250828201905080821115613d8e57613d8d613cfc565b5b92915050565b6000613d9f82613441565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613dd157613dd0613cfc565b5b600182019050919050565b6000613de782613441565b9150613df283613441565b9250828203905081811115613e0a57613e09613cfc565b5b92915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b60008160020a8302905092915050565b600060088302613e757fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613e35565b613e7f8683613e35565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613ebc613eb7613eb284613441565b613e97565b613441565b9050919050565b6000819050919050565b613ed683613ea1565b613eea613ee282613ec3565b848454613e45565b825550505050565b600090565b613eff613ef2565b613f0a818484613ecd565b505050565b5b81811015613f2e57613f23600082613ef7565b600181019050613f10565b5050565b601f821115613f7357613f4481613e10565b613f4d84613e25565b81016020851015613f5c578190505b613f70613f6885613e25565b830182613f0f565b50505b505050565b60008160020a8304905092915050565b6000613f9960001984600802613f78565b1980831691505092915050565b6000613fb28383613f88565b9150826002028217905092915050565b613fcb82613663565b67ffffffffffffffff811115613fe457613fe36136e4565b5b613fee8254613c8f565b613ff9828285613f32565b600060209050601f83116001811461402c576000841561401a578287015190505b6140248582613fa6565b86555061408c565b601f19841661403a86613e10565b60005b828110156140625784890151825560018201915060208501945060208101905061403d565b8683101561407f578489015161407b601f891682613f88565b8355505b6001600288020188555050505b505050505050565b7f4552525f41434345535300000000000000000000000000000000000000000000600082015250565b60006140ca600a8361339a565b91506140d582614094565b602082019050919050565b600060208201905081810360008301526140f9816140bd565b9050919050565b6000819050602082019050919050565b600061411c82516135a9565b80915050919050565b600061413082613663565b8261413a84614100565b905061414581614110565b92506020821015614185576141807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83602003600802613e35565b831692505b5050919050565b600061419782613858565b91506141a283613858565b9250828201905065ffffffffffff8111156141c0576141bf613cfc565b5b92915050565b6000815190506141d58161352a565b92915050565b6000602082840312156141f1576141f06132ca565b5b60006141ff848285016141c6565b9150509291505056fea2646970667358221220a4af5fe38235e6966c14266548b35f81299d92794a1448e534de90d1ab82258264736f6c63430008120033
-\ No newline at end of file
+60806040523480156200001157600080fd5b50604051620049a7380380620049a7833981810160405281019062000037919062000279565b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600b8190555082600890816200008f919062000564565b508160099081620000a1919062000564565b505050506200064b565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200011482620000c9565b810181811067ffffffffffffffff82111715620001365762000135620000da565b5b80604052505050565b60006200014b620000ab565b905062000159828262000109565b919050565b600067ffffffffffffffff8211156200017c576200017b620000da565b5b6200018782620000c9565b9050602081019050919050565b60005b83811015620001b457808201518184015260208101905062000197565b60008484015250505050565b6000620001d7620001d1846200015e565b6200013f565b905082815260208101848484011115620001f657620001f5620000c4565b5b6200020384828562000194565b509392505050565b600082601f830112620002235762000222620000bf565b5b815162000235848260208601620001c0565b91505092915050565b6000819050919050565b62000253816200023e565b81146200025f57600080fd5b50565b600081519050620002738162000248565b92915050565b600080600060608486031215620002955762000294620000b5565b5b600084015167ffffffffffffffff811115620002b657620002b5620000ba565b5b620002c4868287016200020b565b935050602084015167ffffffffffffffff811115620002e857620002e7620000ba565b5b620002f6868287016200020b565b9250506040620003098682870162000262565b9150509250925092565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200036657607f821691505b6020821081036200037c576200037b6200031e565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b60008160020a8302905092915050565b600060088302620003e97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620003a7565b620003f58683620003a7565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620004426200043c62000436846200040d565b62000417565b6200040d565b9050919050565b6000819050919050565b6200045e8362000421565b620004766200046d8262000449565b848454620003b7565b825550505050565b600090565b6200048d6200047e565b6200049a81848462000453565b505050565b5b81811015620004c257620004b660008262000483565b600181019050620004a0565b5050565b601f8211156200051157620004db8162000382565b620004e68462000397565b81016020851015620004f6578190505b6200050e620005058562000397565b8301826200049f565b50505b505050565b60008160020a8304905092915050565b6000620005396000198460080262000516565b1980831691505092915050565b600062000554838362000526565b9150826002028217905092915050565b6200056f8262000313565b67ffffffffffffffff8111156200058b576200058a620000da565b5b6200059782546200034d565b620005a4828285620004c6565b600060209050601f831160018114620005dc5760008415620005c7578287015190505b620005d3858262000546565b86555062000643565b601f198416620005ec8662000382565b60005b828110156200061657848901518255600182019150602085019450602081019050620005ef565b8683101562000636578489015162000632601f89168262000526565b8355505b6001600288020188555050505b505050505050565b61434c806200065b6000396000f3fe608060405260043610610200576000357c01000000000000000000000000000000000000000000000000000000009004806369e85c711161011f578063b88d4fde116100b2578063da2824a811610081578063da2824a8146107a8578063e985e9c5146107d1578063f117e1731461080e578063f9613ab21461084b57610200565b8063b88d4fde146106d5578063c87b56dd146106f1578063c9796c391461072e578063d824ee4f1461076b57610200565b8063a22cb465116100ee578063a22cb46514610607578063adf288df14610630578063b1a6afd31461066d578063b242e5341461069857610200565b806369e85c711461053757806370a08231146105745780638da5cb5b146105b157806395d89b41146105dc57610200565b806340c84b0e116101975780634f64b2be116101665780634f64b2be14610455578063559f5dc9146104925780635ae06f7e146104d15780636352211e146104fa57610200565b806340c84b0e146103a857806342842e0e146103d357806349f2553a146103ef5780634d03546a1461041857610200565b806323b872dd116101d357806323b872dd146102d557806324e0febc146102f15780632b29ba231461032e5780633fd2f5931461036b57610200565b806301ffc9a71461020557806306fdde0314610242578063081812fc1461026d57806318160ddd146102aa575b600080fd5b34801561021157600080fd5b5061022c600480360381019061022791906133ce565b610888565b6040516102399190613416565b60405180910390f35b34801561024e57600080fd5b506102576109dc565b60405161026491906134c1565b60405180910390f35b34801561027957600080fd5b50610294600480360381019061028f9190613519565b610a6a565b6040516102a19190613587565b60405180910390f35b3480156102b657600080fd5b506102bf610aa7565b6040516102cc91906135b1565b60405180910390f35b6102ef60048036038101906102ea91906135f8565b610ab1565b005b3480156102fd57600080fd5b5061031860048036038101906103139190613681565b610b1c565b60405161032591906136bd565b60405180910390f35b34801561033a57600080fd5b50610355600480360381019061035091906136d8565b610b34565b6040516103629190613416565b60405180910390f35b34801561037757600080fd5b50610392600480360381019061038d9190613681565b610be0565b60405161039f919061375a565b60405180910390f35b3480156103b457600080fd5b506103bd610f3f565b6040516103ca919061375a565b60405180910390f35b6103ed60048036038101906103e891906135f8565b610fcd565b005b3480156103fb57600080fd5b50610416600480360381019061041191906138b1565b611038565b005b34801561042457600080fd5b5061043f600480360381019061043a9190613938565b611350565b60405161044c9190613416565b60405180910390f35b34801561046157600080fd5b5061047c60048036038101906104779190613519565b61162e565b60405161048991906136bd565b60405180910390f35b34801561049e57600080fd5b506104b960048036038101906104b49190613978565b611652565b6040516104c8939291906139c7565b60405180910390f35b3480156104dd57600080fd5b506104f860048036038101906104f391906136d8565b6116c6565b005b34801561050657600080fd5b50610521600480360381019061051c9190613519565b6117e5565b60405161052e9190613587565b60405180910390f35b34801561054357600080fd5b5061055e60048036038101906105599190613681565b611821565b60405161056b91906134c1565b60405180910390f35b34801561058057600080fd5b5061059b600480360381019061059691906136d8565b611a3a565b6040516105a891906135b1565b60405180910390f35b3480156105bd57600080fd5b506105c6611a83565b6040516105d39190613587565b60405180910390f35b3480156105e857600080fd5b506105f1611aa7565b6040516105fe91906134c1565b60405180910390f35b34801561061357600080fd5b5061062e60048036038101906106299190613a2a565b611b35565b005b34801561063c57600080fd5b5061065760048036038101906106529190613a6a565b611dd7565b60405161066491906136bd565b60405180910390f35b34801561067957600080fd5b50610682612049565b60405161068f91906136bd565b60405180910390f35b3480156106a457600080fd5b506106bf60048036038101906106ba9190613a2a565b61204f565b6040516106cc9190613416565b60405180910390f35b6106ef60048036038101906106ea9190613b4b565b612130565b005b3480156106fd57600080fd5b5061071860048036038101906107139190613519565b61220b565b60405161072591906134c1565b60405180910390f35b34801561073a57600080fd5b5061075560048036038101906107509190613681565b61227d565b60405161076291906134c1565b60405180910390f35b34801561077757600080fd5b50610792600480360381019061078d9190613c08565b612677565b60405161079f91906136bd565b60405180910390f35b3480156107b457600080fd5b506107cf60048036038101906107ca91906136d8565b6128ea565b005b3480156107dd57600080fd5b506107f860048036038101906107f39190613c5b565b6129d2565b6040516108059190613416565b60405180910390f35b34801561081a57600080fd5b5061083560048036038101906108309190613c9b565b612a6a565b60405161084291906136bd565b60405180910390f35b34801561085757600080fd5b50610872600480360381019061086d9190613681565b612bf9565b60405161087f91906136bd565b60405180910390f35b60006380ac58cd7c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036108dc57600190506109d7565b635b5e139f7c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19160361092e57600190506109d7565b63449a52f87c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19160361098057600190506109d7565b6301ffc9a77c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036109d257600190506109d7565b600090505b919050565b600880546109e990613d31565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1590613d31565b8015610a625780601f10610a3757610100808354040283529160200191610a62565b820191906000526020600020905b815481529060010190602001808311610a4557829003601f168201915b505050505081565b60006006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600a54905090565b610abc838383612ca5565b808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60056020528060005260406000206000915090505481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680610bd9575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b9050919050565b606080600080604067ffffffffffffffff811115610c0157610c00613786565b5b6040519080825280601f01601f191660200182016040528015610c335781602001600182028036833780820191505090505b5092506000905060005b6020811015610f3357600460f0878360208110610c5d57610c5c613d62565b5b1a7f0100000000000000000000000000000000000000000000000000000000000000027f010000000000000000000000000000000000000000000000000000000000000090041660ff16908060020a82049150509250600a8360ff161015610d3557603083610ccc9190613dcd565b7f010000000000000000000000000000000000000000000000000000000000000002848381518110610d0157610d00613d62565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350610da7565b605783610d429190613dcd565b7f010000000000000000000000000000000000000000000000000000000000000002848381518110610d7757610d76613d62565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b600f868260208110610dbc57610dbb613d62565b5b1a7f0100000000000000000000000000000000000000000000000000000000000000027f01000000000000000000000000000000000000000000000000000000000000009004169250600a8360ff161015610e9357603083610e1e9190613dcd565b7f01000000000000000000000000000000000000000000000000000000000000000284600184610e4e9190613e02565b81518110610e5f57610e5e613d62565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350610f11565b605783610ea09190613dcd565b7f01000000000000000000000000000000000000000000000000000000000000000284600184610ed09190613e02565b81518110610ee157610ee0613d62565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b600282610f1e9190613e02565b91508080610f2b90613e36565b915050610c3d565b50829350505050919050565b600c8054610f4c90613d31565b80601f0160208091040260200160405190810160405280929190818152602001828054610f7890613d31565b8015610fc55780601f10610f9a57610100808354040283529160200191610fc5565b820191906000526020600020905b815481529060010190602001808311610fa857829003601f168201915b505050505081565b610fd8838383612ca5565b808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b606060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461109557600080fd5b82915081519050602f7f010000000000000000000000000000000000000000000000000000000000000002826001836110ce9190613e7e565b815181106110df576110de613d62565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461115f57808061115b90613e36565b9150505b8067ffffffffffffffff81111561117957611178613786565b5b6040519080825280601f01601f1916602001820160405280156111ab5781602001600182028036833780820191505090505b50600c90816111ba9190614064565b5060005b82518110156112ab578281815181106111da576111d9613d62565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002600c82815461123290613d31565b811061124157611240613d62565b5b8154600116156112605790600052602060002090602091828204019190065b601f036101000a81548160ff021916907f01000000000000000000000000000000000000000000000000000000000000008404021790555080806112a390613e36565b9150506111be565b508151811461134b577f2f00000000000000000000000000000000000000000000000000000000000000600c835181546112e490613d31565b81106112f3576112f2613d62565b5b8154600116156113125790600052602060002090602091828204019190065b601f036101000a81548160ff021916907f0100000000000000000000000000000000000000000000000000000000000000840402179055505b505050565b60008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806113f65750600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6113ff57600080fd5b61140761332f565b6004600086815260200190815260200160002080549050915060008211156114845760006004600087815260200190815260200160002060008154811061145157611450613d62565b5b9060005260206000200160000160009054906101000a900465ffffffffffff1665ffffffffffff161161148357600080fd5b5b83816000019065ffffffffffff16908165ffffffffffff168152505060046000868152602001908152602001600020819080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548165ffffffffffff021916908365ffffffffffff16021790555060208201518160000160066101000a81548165ffffffffffff021916908365ffffffffffff160217905550604082015181600001600c6101000a81548160ff0219169083151502179055505050600385908060018154018082558091505060019003906000526020600020016000909190919091505560008465ffffffffffff16036115a9576001600a600082825461159d9190613e02565b925050819055506115cb565b8365ffffffffffff16600a60008282546115c39190613e02565b925050819055505b8365ffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fb85ba54b9f6f8241b7e1499e3cfc186ac0b1c8b7100f599bf6ca6844f896c3428760405161161a91906136bd565b60405180910390a360019250505092915050565b6003818154811061163e57600080fd5b906000526020600020016000915090505481565b6004602052816000526040600020818154811061166e57600080fd5b90600052602060002001600091509150508060000160009054906101000a900465ffffffffffff16908060000160069054906101000a900465ffffffffffff169080600001600c9054906101000a900460ff16905083565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061174b575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61178a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178190614182565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600080600560008460010281526020019081526020016000205490506060819060020a026c010000000000000000000000009004915050919050565b6060806060600061183185610be0565b9150600c805461184090613d31565b905090508082516118519190613e02565b67ffffffffffffffff81111561186a57611869613786565b5b6040519080825280601f01601f19166020018201604052801561189c5781602001600182028036833780820191505090505b50925060005b8181101561196157600c8181546118b890613d31565b81106118c7576118c6613d62565b5b8154600116156118e65790600052602060002090602091828204019190065b9054901a7f01000000000000000000000000000000000000000000000000000000000000000284828151811061191f5761191e613d62565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808061195990613e36565b9150506118a2565b5060005b8251811015611a2e5782818151811061198157611980613d62565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000028483815181106119de576119dd613d62565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508180611a1890613e36565b9250508080611a2690613e36565b915050611965565b50829350505050919050565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60098054611ab490613d31565b80601f0160208091040260200160405190810160405280929190818152602001828054611ae090613d31565b8015611b2d5780601f10611b0257610100808354040283529160200191611b2d565b820191906000526020600020905b815481529060010190602001808311611b1057829003601f168201915b505050505081565b8015611c5657600073ffffffffffffffffffffffffffffffffffffffff16600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bd357600080fd5b81600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611d6e565b600073ffffffffffffffffffffffffffffffffffffffff16600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611cee57600080fd5b6000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611dcb9190613416565b60405180910390a35050565b60008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611e7d5750600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611e8657600080fd5b6001600460008581526020019081526020016000208054905014611ea957600080fd5b600060046000858152602001908152602001600020600081548110611ed157611ed0613d62565b5b9060005260206000200160000160009054906101000a900465ffffffffffff1665ffffffffffff1614611f0357600080fd5b6000600102600560008581526020019081526020016000205414611f2657600080fd5b8373ffffffffffffffffffffffffffffffffffffffff1690507fc000000000000000000000000000000000000000000000000000000000000000811790508060010260056000858152602001908152602001600020819055506001600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fcf9190613e02565b925050819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f8856001900460405161203791906135b1565b60405180910390a38291505092915050565b600b5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146120aa57600080fd5b600260009054906101000a900460ff16156120c457600080fd5b81156120e6576001600260006101000a81548160ff0219169083151502179055505b826000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001905092915050565b61213b848484612ca5565b818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f75c9e114f073c346aac7d1d7e9a3c3c14edabcdd27de07d1d9e425f45d318c5e846121f0906141c7565b6040516121fd91906136bd565b60405180910390a450505050565b6060600082600102905060006004600083815260200190815260200160002080549050036122465761223c81612bf9565b9050806001900492505b600060046000838152602001908152602001600020805490501161226957600080fd5b61227583600102611821565b915050919050565b6060806060600061228d85610be0565b9150604767ffffffffffffffff8111156122aa576122a9613786565b5b6040519080825280601f01601f1916602001820160405280156122dc5781602001600182028036833780820191505090505b5092507f73000000000000000000000000000000000000000000000000000000000000008360008151811061231457612313613d62565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f68000000000000000000000000000000000000000000000000000000000000008360018151811061237857612377613d62565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f6100000000000000000000000000000000000000000000000000000000000000836002815181106123dc576123db613d62565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f3200000000000000000000000000000000000000000000000000000000000000836003815181106124405761243f613d62565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f3500000000000000000000000000000000000000000000000000000000000000836004815181106124a4576124a3613d62565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f36000000000000000000000000000000000000000000000000000000000000008360058151811061250857612507613d62565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f3a000000000000000000000000000000000000000000000000000000000000008360068151811061256c5761256b613d62565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506007905060005b604081101561266b578281815181106125be576125bd613d62565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f01000000000000000000000000000000000000000000000000000000000000000284838151811061261b5761261a613d62565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350818061265590613e36565b925050808061266390613e36565b9150506125a2565b50829350505050919050565b600080600460008581526020019081526020016000208361ffff16815481106126a3576126a2613d62565b5b90600052602060002001905080600001600c9054906101000a900460ff1615612701576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f89061427a565b60405180910390fd5b60008361ffff16148015612733575060008160000160009054906101000a900465ffffffffffff1665ffffffffffff16145b156127925760018160000160068282829054906101000a900465ffffffffffff1661275e919061429a565b92506101000a81548165ffffffffffff021916908365ffffffffffff16021790555061278a8585611dd7565b9150506128e3565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806128355750600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612874576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286b90614182565b60405180910390fd5b8060000160009054906101000a900465ffffffffffff1665ffffffffffff168160000160069054906101000a900465ffffffffffff1665ffffffffffff16106128bc57600080fd5b6128df8585858460000160069054906101000a900465ffffffffffff1685612fbc565b9150505b9392505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612978576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296f90614182565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60008173ffffffffffffffffffffffffffffffffffffffff16600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614905092915050565b600080600460008681526020019081526020016000208461ffff1681548110612a9657612a95613d62565b5b90600052602060002001905060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480612b455750600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612b84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7b90614182565b60405180910390fd5b60008160000160009054906101000a900465ffffffffffff1665ffffffffffff1611612baf57600080fd5b8060000160009054906101000a900465ffffffffffff1665ffffffffffff168365ffffffffffff1610612be157600080fd5b612bee8686868685612fbc565b915050949350505050565b60008060056000848152602001908152602001600020549050612c1b8161323a565b612c2457600080fd5b612c2d8161326c565b15612c3b5782915050612ca0565b7effffffffffffffff00000000000000000000000000000000000000000000006001028116905060b881908060020a820491505090507fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000600102831681179050809150505b919050565b60003073ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401612cfc91906135b1565b602060405180830381865afa158015612d19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d3d91906142e9565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612d7757600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614612eab573373ffffffffffffffffffffffffffffffffffffffff166006600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480612ea157503373ffffffffffffffffffffffffffffffffffffffff16600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b612eaa57600080fd5b5b60006006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612f08828461329e565b6001600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f589190613e7e565b925050819055506001600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612faf9190613e02565b9250508190555050505050565b6000806000807fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008860019004169250603067ffffffffffffffff8861ffff161667ffffffffffffffff169060020a0267ffffffffffffffff16831792508565ffffffffffff1683179250826001029050600060010260056000838152602001908152602001600020541461304f57600080fd5b84600001600c9054906101000a900460ff166130b1578460000160069054906101000a900465ffffffffffff1665ffffffffffff168665ffffffffffff16146130b057600185600001600c6101000a81548160ff0219169083151502179055505b5b67ffffffffffffffff886001900416915060b8829060020a0291507f8000000000000000000000000000000000000000000000000000000000000000821791508873ffffffffffffffffffffffffffffffffffffffff168217915060018560000160068282829054906101000a900465ffffffffffff16613132919061429a565b92506101000a81548165ffffffffffff021916908365ffffffffffff1602179055508160010260056000838152602001908152602001600020819055506001600d60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131bf9190613e02565b925050819055508873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f88560405161322391906135b1565b60405180910390a380935050505095945050505050565b6000807f8000000000000000000000000000000000000000000000000000000000000000836001900416119050919050565b6000807f4000000000000000000000000000000000000000000000000000000000000000836001900416119050919050565b6000808360010290506005600082815260200190815260200160002054600190049150600082036132ce57600080fd5b7fffffffffffffffffffffffff0000000000000000000000000000000000000000821691508273ffffffffffffffffffffffffffffffffffffffff168217915081600102600560008381526020019081526020016000208190555050505050565b6040518060600160405280600065ffffffffffff168152602001600065ffffffffffff1681526020016000151581525090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6133ab81613376565b81146133b657600080fd5b50565b6000813590506133c8816133a2565b92915050565b6000602082840312156133e4576133e361336c565b5b60006133f2848285016133b9565b91505092915050565b60008115159050919050565b613410816133fb565b82525050565b600060208201905061342b6000830184613407565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561346b578082015181840152602081019050613450565b60008484015250505050565b6000601f19601f8301169050919050565b600061349382613431565b61349d818561343c565b93506134ad81856020860161344d565b6134b681613477565b840191505092915050565b600060208201905081810360008301526134db8184613488565b905092915050565b6000819050919050565b6134f6816134e3565b811461350157600080fd5b50565b600081359050613513816134ed565b92915050565b60006020828403121561352f5761352e61336c565b5b600061353d84828501613504565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061357182613546565b9050919050565b61358181613566565b82525050565b600060208201905061359c6000830184613578565b92915050565b6135ab816134e3565b82525050565b60006020820190506135c660008301846135a2565b92915050565b6135d581613566565b81146135e057600080fd5b50565b6000813590506135f2816135cc565b92915050565b6000806000606084860312156136115761361061336c565b5b600061361f868287016135e3565b9350506020613630868287016135e3565b925050604061364186828701613504565b9150509250925092565b6000819050919050565b61365e8161364b565b811461366957600080fd5b50565b60008135905061367b81613655565b92915050565b6000602082840312156136975761369661336c565b5b60006136a58482850161366c565b91505092915050565b6136b78161364b565b82525050565b60006020820190506136d260008301846136ae565b92915050565b6000602082840312156136ee576136ed61336c565b5b60006136fc848285016135e3565b91505092915050565b600081519050919050565b600082825260208201905092915050565b600061372c82613705565b6137368185613710565b935061374681856020860161344d565b61374f81613477565b840191505092915050565b600060208201905081810360008301526137748184613721565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6137be82613477565b810181811067ffffffffffffffff821117156137dd576137dc613786565b5b80604052505050565b60006137f0613362565b90506137fc82826137b5565b919050565b600067ffffffffffffffff82111561381c5761381b613786565b5b61382582613477565b9050602081019050919050565b82818337600083830152505050565b600061385461384f84613801565b6137e6565b9050828152602081018484840111156138705761386f613781565b5b61387b848285613832565b509392505050565b600082601f8301126138985761389761377c565b5b81356138a8848260208601613841565b91505092915050565b6000602082840312156138c7576138c661336c565b5b600082013567ffffffffffffffff8111156138e5576138e4613371565b5b6138f184828501613883565b91505092915050565b600065ffffffffffff82169050919050565b613915816138fa565b811461392057600080fd5b50565b6000813590506139328161390c565b92915050565b6000806040838503121561394f5761394e61336c565b5b600061395d8582860161366c565b925050602061396e85828601613923565b9150509250929050565b6000806040838503121561398f5761398e61336c565b5b600061399d8582860161366c565b92505060206139ae85828601613504565b9150509250929050565b6139c1816138fa565b82525050565b60006060820190506139dc60008301866139b8565b6139e960208301856139b8565b6139f66040830184613407565b949350505050565b613a07816133fb565b8114613a1257600080fd5b50565b600081359050613a24816139fe565b92915050565b60008060408385031215613a4157613a4061336c565b5b6000613a4f858286016135e3565b9250506020613a6085828601613a15565b9150509250929050565b60008060408385031215613a8157613a8061336c565b5b6000613a8f858286016135e3565b9250506020613aa08582860161366c565b9150509250929050565b600067ffffffffffffffff821115613ac557613ac4613786565b5b613ace82613477565b9050602081019050919050565b6000613aee613ae984613aaa565b6137e6565b905082815260208101848484011115613b0a57613b09613781565b5b613b15848285613832565b509392505050565b600082601f830112613b3257613b3161377c565b5b8135613b42848260208601613adb565b91505092915050565b60008060008060808587031215613b6557613b6461336c565b5b6000613b73878288016135e3565b9450506020613b84878288016135e3565b9350506040613b9587828801613504565b925050606085013567ffffffffffffffff811115613bb657613bb5613371565b5b613bc287828801613b1d565b91505092959194509250565b600061ffff82169050919050565b613be581613bce565b8114613bf057600080fd5b50565b600081359050613c0281613bdc565b92915050565b600080600060608486031215613c2157613c2061336c565b5b6000613c2f868287016135e3565b9350506020613c408682870161366c565b9250506040613c5186828701613bf3565b9150509250925092565b60008060408385031215613c7257613c7161336c565b5b6000613c80858286016135e3565b9250506020613c91858286016135e3565b9150509250929050565b60008060008060808587031215613cb557613cb461336c565b5b6000613cc3878288016135e3565b9450506020613cd48782880161366c565b9350506040613ce587828801613bf3565b9250506060613cf687828801613923565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613d4957607f821691505b602082108103613d5c57613d5b613d02565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff82169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613dd882613d91565b9150613de383613d91565b9250828201905060ff811115613dfc57613dfb613d9e565b5b92915050565b6000613e0d826134e3565b9150613e18836134e3565b9250828201905080821115613e3057613e2f613d9e565b5b92915050565b6000613e41826134e3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613e7357613e72613d9e565b5b600182019050919050565b6000613e89826134e3565b9150613e94836134e3565b9250828203905081811115613eac57613eab613d9e565b5b92915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b60008160020a8302905092915050565b600060088302613f177fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613ed7565b613f218683613ed7565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613f5e613f59613f54846134e3565b613f39565b6134e3565b9050919050565b6000819050919050565b613f7883613f43565b613f8c613f8482613f65565b848454613ee7565b825550505050565b600090565b613fa1613f94565b613fac818484613f6f565b505050565b5b81811015613fd057613fc5600082613f99565b600181019050613fb2565b5050565b601f82111561401557613fe681613eb2565b613fef84613ec7565b81016020851015613ffe578190505b61401261400a85613ec7565b830182613fb1565b50505b505050565b60008160020a8304905092915050565b600061403b6000198460080261401a565b1980831691505092915050565b6000614054838361402a565b9150826002028217905092915050565b61406d82613705565b67ffffffffffffffff81111561408657614085613786565b5b6140908254613d31565b61409b828285613fd4565b600060209050601f8311600181146140ce57600084156140bc578287015190505b6140c68582614048565b86555061412e565b601f1984166140dc86613eb2565b60005b82811015614104578489015182556001820191506020850194506020810190506140df565b86831015614121578489015161411d601f89168261402a565b8355505b6001600288020188555050505b505050505050565b7f4552525f41434345535300000000000000000000000000000000000000000000600082015250565b600061416c600a8361343c565b915061417782614136565b602082019050919050565b6000602082019050818103600083015261419b8161415f565b9050919050565b6000819050602082019050919050565b60006141be825161364b565b80915050919050565b60006141d282613705565b826141dc846141a2565b90506141e7816141b2565b92506020821015614227576142227fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83602003600802613ed7565b831692505b5050919050565b7f4552525f53504152534500000000000000000000000000000000000000000000600082015250565b6000614264600a8361343c565b915061426f8261422e565b602082019050919050565b6000602082019050818103600083015261429381614257565b9050919050565b60006142a5826138fa565b91506142b0836138fa565b9250828201905065ffffffffffff8111156142ce576142cd613d9e565b5b92915050565b6000815190506142e3816135cc565b92915050565b6000602082840312156142ff576142fe61336c565b5b600061430d848285016142d4565b9150509291505056fea26469706673582212204235583eebf0cfd99f05220e5354f31f29b8b9ae20e7b65bba13503dfb020bbb64736f6c63430008120033
+\ No newline at end of file
diff --git a/python/craft_nft/runnable/publish.py b/python/craft_nft/runnable/publish.py
@@ -61,7 +61,7 @@ def process_config_local(config, arg, args, flags):
arg_flags = ArgFlag()
arg = Arg(arg_flags)
-flags = arg_flags.STD_WRITE | arg_flags.WALLET | arg_flags.CREATE | arg_flags.VALUE | arg_flags.TAB
+flags = arg_flags.STD_WRITE | arg_flags.WALLET | arg_flags.VALUE | arg_flags.TAB
argparser = chainlib.eth.cli.ArgumentParser()
argparser.add_argument('--name', type=str, required=True, help='Token name')