60806040523480156200001157600080fd5b506040518060400160405280600581526020017f4a61626c650000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f4a4142000000000000000000000000000000000000000000000000000000000081525081600390805190602001906200009692919062000284565b508060049080519060200190620000af92919062000284565b505050620000f233620000c7620000f860201b60201c565b600a620000d5919062000474565b63ee6b2800620000e69190620005b1565b6200010160201b60201c565b620006f3565b60006012905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000174576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200016b906200036c565b60405180910390fd5b62000188600083836200027a60201b60201c565b80600260008282546200019c9190620003bc565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620001f39190620003bc565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200025a91906200038e565b60405180910390a362000276600083836200027f60201b60201c565b5050565b505050565b505050565b828054620002929062000629565b90600052602060002090601f016020900481019282620002b6576000855562000302565b82601f10620002d157805160ff191683800117855562000302565b8280016001018555821562000302579182015b8281111562000301578251825591602001919060010190620002e4565b5b50905062000311919062000315565b5090565b5b808211156200033057600081600090555060010162000316565b5090565b600062000343601f83620003ab565b91506200035082620006ca565b602082019050919050565b620003668162000612565b82525050565b60006020820190508181036000830152620003878162000334565b9050919050565b6000602082019050620003a560008301846200035b565b92915050565b600082825260208201905092915050565b6000620003c98262000612565b9150620003d68362000612565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200040e576200040d6200065f565b5b828201905092915050565b6000808291508390505b60018511156200046b578086048111156200044357620004426200065f565b5b6001851615620004535780820291505b80810290506200046385620006bd565b945062000423565b94509492505050565b6000620004818262000612565b91506200048e836200061c565b9250620004bd7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620004c5565b905092915050565b600082620004d75760019050620005aa565b81620004e75760009050620005aa565b81600181146200050057600281146200050b5762000541565b6001915050620005aa565b60ff84111562000520576200051f6200065f565b5b8360020a9150848211156200053a57620005396200065f565b5b50620005aa565b5060208310610133831016604e8410600b84101617156200057b5782820a9050838111156200057557620005746200065f565b5b620005aa565b6200058a848484600162000419565b92509050818404811115620005a457620005a36200065f565b5b81810290505b9392505050565b6000620005be8262000612565b9150620005cb8362000612565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156200060757620006066200065f565b5b828202905092915050565b6000819050919050565b600060ff82169050919050565b600060028204905060018216806200064257607f821691505b602082108114156200065957620006586200068e565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60008160011c9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b61173c80620007036000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c806342966c681161008c57806395d89b411161006657806395d89b4114610226578063a457c2d714610244578063a9059cbb14610274578063dd62ed3e146102a4576100cf565b806342966c68146101be57806370a08231146101da57806379cc67901461020a576100cf565b806306fdde03146100d4578063095ea7b3146100f257806318160ddd1461012257806323b872dd14610140578063313ce56714610170578063395093511461018e575b600080fd5b6100dc6102d4565b6040516100e991906110eb565b60405180910390f35b61010c60048036038101906101079190610ec2565b610366565b60405161011991906110d0565b60405180910390f35b61012a610389565b604051610137919061122d565b60405180910390f35b61015a60048036038101906101559190610e6f565b610393565b60405161016791906110d0565b60405180910390f35b6101786103c2565b6040516101859190611248565b60405180910390f35b6101a860048036038101906101a39190610ec2565b6103cb565b6040516101b591906110d0565b60405180910390f35b6101d860048036038101906101d39190610f02565b610475565b005b6101f460048036038101906101ef9190610e02565b610489565b604051610201919061122d565b60405180910390f35b610224600480360381019061021f9190610ec2565b6104d1565b005b61022e6104f1565b60405161023b91906110eb565b60405180910390f35b61025e60048036038101906102599190610ec2565b610583565b60405161026b91906110d0565b60405180910390f35b61028e60048036038101906102899190610ec2565b61066d565b60405161029b91906110d0565b60405180910390f35b6102be60048036038101906102b99190610e2f565b610690565b6040516102cb919061122d565b60405180910390f35b6060600380546102e390611391565b80601f016020809104026020016040519081016040528092919081815260200182805461030f90611391565b801561035c5780601f106103315761010080835404028352916020019161035c565b820191906000526020600020905b81548152906001019060200180831161033f57829003601f168201915b5050505050905090565b600080610371610717565b905061037e81858561071f565b600191505092915050565b6000600254905090565b60008061039e610717565b90506103ab8582856108ea565b6103b6858585610976565b60019150509392505050565b60006012905090565b6000806103d6610717565b905061046a818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610465919061127f565b61071f565b600191505092915050565b610486610480610717565b82610bf7565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6104e3826104dd610717565b836108ea565b6104ed8282610bf7565b5050565b60606004805461050090611391565b80601f016020809104026020016040519081016040528092919081815260200182805461052c90611391565b80156105795780601f1061054e57610100808354040283529160200191610579565b820191906000526020600020905b81548152906001019060200180831161055c57829003601f168201915b5050505050905090565b60008061058e610717565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015610654576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064b9061120d565b60405180910390fd5b610661828686840361071f565b60019250505092915050565b600080610678610717565b9050610685818585610976565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561078f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610786906111ed565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156107ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f69061114d565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516108dd919061122d565b60405180910390a3505050565b60006108f68484610690565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146109705781811015610962576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109599061116d565b60405180910390fd5b61096f848484840361071f565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109dd906111cd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610a56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4d9061110d565b60405180910390fd5b610a61838383610dce565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610ae7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ade9061118d565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610b7a919061127f565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610bde919061122d565b60405180910390a3610bf1848484610dd3565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610c67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5e906111ad565b60405180910390fd5b610c7382600083610dce565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610cf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf09061112d565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160026000828254610d5091906112d5565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610db5919061122d565b60405180910390a3610dc983600084610dd3565b505050565b505050565b505050565b600081359050610de7816116d8565b92915050565b600081359050610dfc816116ef565b92915050565b600060208284031215610e1857610e17611421565b5b6000610e2684828501610dd8565b91505092915050565b60008060408385031215610e4657610e45611421565b5b6000610e5485828601610dd8565b9250506020610e6585828601610dd8565b9150509250929050565b600080600060608486031215610e8857610e87611421565b5b6000610e9686828701610dd8565b9350506020610ea786828701610dd8565b9250506040610eb886828701610ded565b9150509250925092565b60008060408385031215610ed957610ed8611421565b5b6000610ee785828601610dd8565b9250506020610ef885828601610ded565b9150509250929050565b600060208284031215610f1857610f17611421565b5b6000610f2684828501610ded565b91505092915050565b610f388161131b565b82525050565b6000610f4982611263565b610f53818561126e565b9350610f6381856020860161135e565b610f6c81611426565b840191505092915050565b6000610f8460238361126e565b9150610f8f82611437565b604082019050919050565b6000610fa760228361126e565b9150610fb282611486565b604082019050919050565b6000610fca60228361126e565b9150610fd5826114d5565b604082019050919050565b6000610fed601d8361126e565b9150610ff882611524565b602082019050919050565b600061101060268361126e565b915061101b8261154d565b604082019050919050565b600061103360218361126e565b915061103e8261159c565b604082019050919050565b600061105660258361126e565b9150611061826115eb565b604082019050919050565b600061107960248361126e565b91506110848261163a565b604082019050919050565b600061109c60258361126e565b91506110a782611689565b604082019050919050565b6110bb81611347565b82525050565b6110ca81611351565b82525050565b60006020820190506110e56000830184610f2f565b92915050565b600060208201905081810360008301526111058184610f3e565b905092915050565b6000602082019050818103600083015261112681610f77565b9050919050565b6000602082019050818103600083015261114681610f9a565b9050919050565b6000602082019050818103600083015261116681610fbd565b9050919050565b6000602082019050818103600083015261118681610fe0565b9050919050565b600060208201905081810360008301526111a681611003565b9050919050565b600060208201905081810360008301526111c681611026565b9050919050565b600060208201905081810360008301526111e681611049565b9050919050565b600060208201905081810360008301526112068161106c565b9050919050565b600060208201905081810360008301526112268161108f565b9050919050565b600060208201905061124260008301846110b2565b92915050565b600060208201905061125d60008301846110c1565b92915050565b600081519050919050565b600082825260208201905092915050565b600061128a82611347565b915061129583611347565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156112ca576112c96113c3565b5b828201905092915050565b60006112e082611347565b91506112eb83611347565b9250828210156112fe576112fd6113c3565b5b828203905092915050565b600061131482611327565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b8381101561137c578082015181840152602081019050611361565b8381111561138b576000848401525b50505050565b600060028204905060018216806113a957607f821691505b602082108114156113bd576113bc6113f2565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6116e181611309565b81146116ec57600080fd5b50565b6116f881611347565b811461170357600080fd5b5056fea26469706673582212209205eb0cf2e65e51bda23a3ae2526e6e31a2e1684f2f7c200b2e32867bee181864736f6c63430008070033